日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

01.神经网络和深度学习 W3.浅层神经网络

發布時間:2024/7/5 pytorch 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 01.神经网络和深度学习 W3.浅层神经网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 神經網絡概覽
    • 2. 神經網絡的表示
    • 3. 神經網絡的輸出
    • 4. 多樣本向量化
    • 5. 激活函數
    • 6. 為什么需要 非線性激活函數
    • 7. 激活函數的導數
    • 8. 隨機初始化
    • 作業

參考:
吳恩達視頻課
深度學習筆記

1. 神經網絡概覽


xW[1]b[1]}?z[1]=W[1]x+b[1]?a[1]=σ(z[1])\left.\begin{array}{c}x \\ W^{[1]} \\ b^{[1]}\end{array}\right\} \Longrightarrow z^{[1]}=W^{[1]} x+b^{[1]} \Longrightarrow a^{[1]}=\sigma\left(z^{[1]}\right)xW[1]b[1]??????z[1]=W[1]x+b[1]?a[1]=σ(z[1])

第一層根據輸入計算 z[1]z^{[1]}z[1],然后計算第一層的輸出 a[1]a^{[1]}a[1]

a[1]=σ(z[1])W[2]b[2]}?z[2]=W[2]a[1]+b[2]?a[2]=σ(z[2])?L(a[2],y)\left.\begin{array}{r}a^{[1]}=\sigma\left(z^{[1]}\right) \\ W^{[2]} \\ b^{[2]}\end{array}\right\} \Longrightarrow z^{[2]}=W^{[2]} a^{[1]}+b^{[2]} \Longrightarrow a^{[2]}=\sigma\left(z^{[2]}\right)\\ \Longrightarrow L(a^{[2]}, y)a[1]=σ(z[1])W[2]b[2]??????z[2]=W[2]a[1]+b[2]?a[2]=σ(z[2])?L(a[2],y)

把第一層的輸出 a[1]a^{[1]}a[1] 作為第二層的輸入,計算 z[2]z^{[2]}z[2],代入 sigmoid 函數,得到輸出 a[2]a^{[2]}a[2],進而計算損失函數

da[1]=dσ(z[1])dW[2]db[2]}?dz[2]=d(W[2]a[1]+b[2])?da[2]=dσ(z[2])?dL(a[2],y)\left.\begin{array}{rl}d a^{[1]}=d \sigma\left(z^{[1]}\right) & \\ d W^{[2]} \\ d b^{[2]}\end{array}\right\} \Longleftarrow d z^{[2]}=d\left(W^{[2]} a^{[1]}+b^{[2]}\right) \Longleftarrow d a^{[2]}=d \sigma\left(z^{[2]}\right)\\ \Longleftarrow dL(a^{[2]}, y)da[1]=dσ(z[1])dW[2]db[2]??????dz[2]=d(W[2]a[1]+b[2])?da[2]=dσ(z[2])?dL(a[2],y)

還有反向的求導過程

2. 神經網絡的表示

3. 神經網絡的輸出


每個神經網絡單元的工作包括兩部分:計算 zzz,然后根據激活函數(sigmoid)計算 σ(z)\sigma(z)σ(z)

z1[1]=w1[1]Tx+b1[1],a1[1]=σ(z1[1])z2[1]=w2[1]Tx+b2[1],a2[1]=σ(z2[1])z3[1]=w3[1]Tx+b3[1],a3[1]=σ(z3[1])z4[1]=w4[1]Tx+b4[1],a4[1]=σ(z4[1])\begin{aligned} z_{1}^{[1]} &=w_{1}^{[1] T} x+b_{1}^{[1]}, \quad a_{1}^{[1]}=\sigma\left(z_{1}^{[1]}\right) \\ z_{2}^{[1]} &=w_{2}^{[1] T} x+b_{2}^{[1]}, \quad a_{2}^{[1]}=\sigma\left(z_{2}^{[1]}\right) \\ z_{3}^{[1]} &=w_{3}^{[1] T} x+b_{3}^{[1]}, \quad a_{3}^{[1]}=\sigma\left(z_{3}^{[1]}\right) \\ z_{4}^{[1]} &=w_{4}^{[1] T} x+b_{4}^{[1]}, \quad a_{4}^{[1]}=\sigma\left(z_{4}^{[1]}\right) \end{aligned}z1[1]?z2[1]?z3[1]?z4[1]??=w1[1]T?x+b1[1]?,a1[1]?=σ(z1[1]?)=w2[1]T?x+b2[1]?,a2[1]?=σ(z2[1]?)=w3[1]T?x+b3[1]?,a3[1]?=σ(z3[1]?)=w4[1]T?x+b4[1]?,a4[1]?=σ(z4[1]?)?

[layer] 上標表示第幾層,下標表示該層的第幾個節點


a[1]=[a1[1]a2[1]a3[1]a4[1]]=σ(z[1])a^{[1]}=\left[\begin{array}{c}a_{1}^{[1]} \\ a_{2}^{[1]} \\ a_{3}^{[1]} \\ a_{4}^{[1]}\end{array}\right]=\sigma\left(z^{[1]}\right)a[1]=??????a1[1]?a2[1]?a3[1]?a4[1]????????=σ(z[1])

  • 輸入一個樣本的特征向量,四行代碼計算出一個簡單神經網絡的輸出,那么多個樣本呢?往下看

4. 多樣本向量化

對于 m 個樣本,(i)表示第i個樣本

z[1](i)=W[1](i)x(i)+b[1](i)a[1](i)=σ(z[1](i))z[2](i)=W[2](i)a[1](i)+b[2](i)a[2](i)=σ(z[2](i))\begin{aligned} z^{[1](i)} &=W^{[1](i)} x^{(i)}+b^{[1](i)} \\ a^{[1](i)} &=\sigma\left(z^{[1](i)}\right) \\ z^{[2](i)} &=W^{[2](i)} a^{[1](i)}+b^{[2](i)} \\ a^{[2](i)} &=\sigma\left(z^{[2](i)}\right) \end{aligned}z[1](i)a[1](i)z[2](i)a[2](i)?=W[1](i)x(i)+b[1](i)=σ(z[1](i))=W[2](i)a[1](i)+b[2](i)=σ(z[2](i))?

  • 為了向量化計算,進行堆疊
    x=[????x(1)x(2)?x(m)????]x=\left[\begin{array}{cccc}\vdots & \vdots & \vdots & \vdots \\ x^{(1)} & x^{(2)} & \cdots & x^{(m)} \\ \vdots & \vdots & \vdots & \vdots\end{array}\right]x=??????x(1)???x(2)???????x(m)???????

Z[1]=[????z[1](1)z[1](2)?z[1](m)????]Z^{[1]}=\left[\begin{array}{cccc}\vdots & \vdots & \vdots & \vdots \\ z^{[1](1)} & z^{[1](2)} & \cdots & z^{[1](m)} \\ \vdots & \vdots & \vdots & \vdots\end{array}\right]Z[1]=??????z[1](1)???z[1](2)???????z[1](m)???????

A[1]=[????α[1](1)α[1](2)?α[1](m)????]A^{[1]}=\left[\begin{array}{cccc}\vdots & \vdots & \vdots & \vdots \\ \alpha^{[1](1)} & \alpha^{[1](2)} & \cdots & \alpha^{[1](m)} \\ \vdots & \vdots & \vdots & \vdots\end{array}\right]A[1]=??????α[1](1)???α[1](2)???????α[1](m)???????

z[1](i)=W[1](i)x(i)+b[1]α[1](i)=σ(z[1](i))z[2](i)=W[2](i)α[1](i)+b[2]α[2](i)=σ(z[2](i))}?{A[1]=σ(z[1])z[2]=W[2]A[1]+b[2]A[2]=σ(z[2])\left.\begin{array}{c}z^{[1](i)}=W^{[1](i)} x^{(i)}+b^{[1]} \\ \alpha^{[1](i)}=\sigma\left(z^{[1](i)}\right) \\ z^{[2](i)=W^{[2](i)} \alpha^{[1](i)}+b^{[2]}} \\ \alpha^{[2](i)}=\sigma\left(z^{[2](i)}\right)\end{array}\right\} \Longrightarrow \left\{ \begin{array}{c} A^{[1]}=\sigma\left(z^{[1]}\right) \\ z^{[2]}=W^{[2]} A^{[1]}+b^{[2]} \\ A^{[2]}=\sigma\left(z^{[2]}\right)\end{array}\right.z[1](i)=W[1](i)x(i)+b[1]α[1](i)=σ(z[1](i))z[2](i)=W[2](i)α[1](i)+b[2]α[2](i)=σ(z[2](i))??????????????A[1]=σ(z[1])z[2]=W[2]A[1]+b[2]A[2]=σ(z[2])?

列向看,對應于不同的特征,就是神經網絡中的該層的各個節點
行向看,對應于不同的訓練樣本

5. 激活函數

  • tanh激活函數是 sigmoid的平移伸縮結果,其效果在所有場合都優于sigmoid,tanh幾乎適合所有場合
  • 例外是,二分類問題的輸出層,想讓結果介于 0,1之間,所以使用 sigmoid 激活函數

tanh、 sigmoid兩者的缺點:

  • 在特別大或者特別小 zzz 的情況下,導數的梯度 或者 函數的斜率會變得特別小,最后就會接近于0,導致降低梯度下降的速度

  • 修正線性單元的函數(ReLu

激活函數的選擇經驗

  • 如果輸出是0、1值(二分類問題),輸出層 選擇sigmoid函數,其它所有單元都選擇Relu函數

  • 隱藏層通常會使用Relu激活函數。有時,也會使用tanh激活函數,但Relu的一個缺點是:當是負值的時候,導數等于0

  • 另一個版本的Relu被稱為Leaky Relu,當是負值時,這個函數的值不等于0,而是輕微的傾斜,這個函數通常比Relu激活函數效果要好,盡管在實際中Leaky ReLu使用的并不多

ReLu、Leaky ReLu的優點:

  • sigmoid函數需要進行浮點四則運算,在實踐中,使用ReLu激活函數學習的更快

  • sigmoid和tanh函數的導數在正負飽和區的梯度接近于0,這會造成梯度彌散,而Relu和Leaky ReLu函數大于0部分都為常數,不會產生梯度彌散現象。(Relu進入負半區的時候,梯度為0,神經元此時不會訓練,產生所謂的稀疏性,而Leaky ReLu不會有這問題)

  • 雖然ReLu的梯度一半都是0,但是,有足夠的隱藏層使得 zzz 值大于0,所以對大多數的訓練數據來說學習過程仍然可以很快

6. 為什么需要 非線性激活函數

線性隱藏層一點用也沒有,因為線性函數的組合本身就是線性函數,所以除非你引入非線性,否則你無法計算出更有趣的函數,即使網絡層數再多也不行

  • 不能在隱藏層用線性激活函數,可以用ReLU、tanh、leaky ReLU或者其他的非線性激活函數
  • 唯一可以用 線性激活函數的通常就是輸出層;在隱藏層使用 線性激活函數非常少見

7. 激活函數的導數

  • sigmoid

    a=g(z);g′(z)=ddzg(z)=a(1?a)a=g(z) ;\quad g^{\prime}(z)=\fracozvdkddzhkzd{d z} g(z)=a(1-a)a=g(z);g(z)=dzd?g(z)=a(1?a)
  • tanh

a=g(z);g′(z)=ddzg(z)=1?a2a=g(z) ; \quad g^{\prime}(z)=\fracozvdkddzhkzd{d z} g(z)=1-a^2a=g(z);g(z)=dzd?g(z)=1?a2

  • ReLu Rectified Linear Unit

    g′(z)={0if?z<01if?z>0undefinedif?z=0g^{\prime}(z)=\left\{\begin{array}{ll}0 & \text { if } z<0 \\ 1 & \text { if } z>0 \\ u n d e f i n e d & \text { if } z=0\end{array}\right.g(z)=????01undefined??if?z<0?if?z>0?if?z=0?
    z=0z=0z=0 時,可以讓導數為 0,或者 1

  • Leaky ReLU Leaky linear unit

    g′(z)={0.01if?z<01if?z>0undefinedif?z=0g^{\prime}(z)=\left\{\begin{array}{ll}0.01 & \text { if } z<0 \\ 1 & \text { if } z>0 \\ u n d e f i n e d & \text { if } z=0\end{array}\right.g(z)=????0.011undefined??if?z<0?if?z>0?if?z=0?
    z=0z=0z=0 時,可以讓導數為 0.01,或者 1

8. 隨機初始化

對于一個神經網絡,如果你把權重或者參數都初始化為0,那么梯度下降將不會起作用。

W[1]=np.random.randn(2,2)?0.01,b[1]=np.zeros?((2,1))W[2]=np.random.randn(2,2)?0.01,b[2]=0\begin{aligned} W^{[1]} &=n p . \text {random.randn}(2,2) * 0.01, \quad b^{[1]}=n p . z \operatorname{eros}((2,1)) \\ W^{[2]} &=n p . \text {random.randn}(2,2) * 0.01, \quad b^{[2]}=0 \end{aligned}W[1]W[2]?=np.random.randn(2,2)?0.01,b[1]=np.zeros((2,1))=np.random.randn(2,2)?0.01,b[2]=0?
常數為什么是0.01,而不是100或者1000,sigmoid/tanh 激活函數在很平坦的地方,學習非常慢

當你訓練一個非常非常的神經網絡,你可能要試試0.01以外的常數

作業

01.神經網絡和深度學習 W3.淺層神經網絡(作業:帶一個隱藏層的神經網絡)


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的01.神经网络和深度学习 W3.浅层神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。