3.8 多層感知機 動手學深度學習——pytorch1.10

學了本文你能學到什麼?僅供學習,如有疑問,請留言。。。

注:紅色是小結,     紫色是重點,能像被課文一樣背誦感知機

目錄

 3.8 多層感知機

3.8.1 隱藏層

3.8.2 激活函數

3.8.2.1 ReLU函數

3.8.2.2 sigmoid函數

3.8.2.3 tanh函數

3.8.3 多層感知機


小結
多層感知機在輸出層與輸入層之間加入了一個或多個全連接隱藏層,並通過激活函數對隱藏層輸出進行變換。
常用的激活函數包括ReLU函數、sigmoid函數和tanh函數。

# 3.8.1 隱藏層

多層感知機在單層神經網絡的基礎上引入了一到多個隱藏層(hidden layer)。
"多層感知機中的隱藏層和輸出層都是全連接層。"

隱藏層位於輸入層和輸出層之間。

圖3.3展示了一個多層感知機的神經網絡圖,它含有一個隱藏層,該層中有5個隱藏單元。

 

# 3.8.2 激活函數


不難發現,即便再添加更多的隱藏層,以上設計依然只能與僅含輸出層的單層神經網絡等價。
上述問題的根源在於全連接層只是對數據做仿射變換(affine transformation),而多個仿射變換的疊加仍然是一個仿射變換。
解決問題的一個方法是引入非線性變換,例如對隱藏變量使用按元素運算的非線性函數進行變換,然後再作爲下一個全連接層的輸入。這個非線性函數被稱爲激活函數(activation function)。


# 3.8.2.1 ReLU函數


"ReLU函數只保留正數元素,並將負數元素清零。"
import torch
import numpy as np
import matplotlib.pyplot as plt
import sys
sys.path.append("..") # 爲了導入上層目錄的d2lzh_pytorch
import d2lzh_pytorch as d21
#
# def xyplot(x_vals, y_vals, name):
#     d21.set_figsize(figsize = (5, 2.5))
#     d21.ple.plot(x_vals.detach().numpy(), y_vals.detach().numpy())
#     d21.plt.xlabel("x")
#     d21.plt.ylabel(name +"(x)")
#     #我們接下來通過Tensor提供的relu函數來繪製ReLU函數。可以看到,該激活函數是一個兩段線性函數。
# x = torch.arange(-8.0, 8.0, 0.1, requires_grad=True)
# y = x.relu()
# xyplot(x, y, 'relu')


"""
當輸入爲負數時,ReLU函數的導數爲0;當輸入爲正數時,ReLU函數的導數爲1。儘管輸入爲0時ReLU函數不可導,但是我們可以取此處的導數爲0。

y.sum().backward()

xyplot(x, x.grad, 'grad of relu')
"""

 

# 3.8.2.2 sigmoid函數


"sigmoid函數可以將元素的值變換到0和1之間:"

下面繪製了sigmoid函數。當輸入接近0時,sigmoid函數接近線性變換。

y = x.sigmoid()

xyplot(x, y, 'sigmoid')

 

"當輸入爲0時,sigmoid函數的導數達到最大值0.25;當輸入越偏離0時,sigmoid函數的導數越接近0。"

# 3.8.2.3 tanh函數


"tanh(雙曲正切)函數可以將元素的值變換到-1和1之間:"


"當輸入接近0時,tanh函數接近線性變換。雖然該函數的形狀和sigmoid函數的形狀很像,但tanh函數在座標系的原點上對稱。" 

y = x.tanh()

xyplot(x, y, 'tanh')


"當輸入爲0時,tanh函數的導數達到最大值1;當輸入越偏離0時,tanh函數的導數越接近0。"

x.grad.zero_()

y.sum().backward()

xyplot(x, x.grad, 'grad of tanh')

# 3.8.3 多層感知機

 

"多層感知機就是含有至少一個隱藏層的由全連接層組成的神經網絡,且每個隱藏層的輸出通過激活函數進行變換。"
"多層感知機的層數和各隱藏層中隱藏單元個數都是超參數"


"在分類問題中,我們可以對輸出OO做softmax運算,並使用softmax迴歸中的交叉熵損失函數。"
"在迴歸問題中,我們將輸出層的輸出個數設爲1,並將輸出OO直接提供給線性迴歸中使用的平方損失函數。"

 

參考鏈接:http://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.8_mlp?id=_38-%E5%A4%9A%E5%B1%82%E6%84%9F%E7%9F%A5%E6%9C%BA

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章