一、梯度
1、導數、偏微分、梯度的區別:
1)導數:是標量,是在某一方向上變化的效率
2)偏微分,partial derivate:特殊的導數,也是標量。函數的自變量的方向,函數的自變量越多,偏微分就越多。
3)梯度,gradient:把所有的偏微分集合成向量,是向量。
梯度向量的長度代表函數在當前點變化的速率。
2、梯度的作用:
1)作用通過梯度來找到函數的極小值
2)如何找到極小值,通過以下公式:
學習步長就是學習率。
不斷更新自變量,當偏導(梯度)趨近於0的時候,函數值也就趨近於極小值。
3)舉例:
3、梯度的優化方法:
不同的優化方法具有不同的效率、准確率。有的快,有的准確率高。主要通過以下幾個方向優化:
1)初始化數據(initialization)
初始狀態的不同,對結果的影響可能有很大區別
如果不清楚的話,就使用目前主流的初始化方法。
2)學習率(learning rate)
過大會導致數據不收斂,過小會導致計算量的增加。
3)動量(monument)
給數據一個慣性,當慣性達到一定程度后,可以減少數據陷入局部極小值的情況。
4、凸函數(convex function):
向一個碗一樣,兩點中點處,均值大於實際值,如下圖所示
5、局部極小值(local minima):
局部極小值較多的情況的解決辦法:
6、鞍點(saddle point):
一個點,在某一方向上是極小值,在另一方向上又是極大值。如下圖中紅點所示:
二、激活函數
1、激活函數的點
1)作用
當函數值達到某一閾值后,激活函數將函數值設置為特定值(根據激活函數公式而定),從而達到激活的目的
2)激活函數均不可導
2、常用激活函數
1)sigmoid
* sigmoid導數(derivative):
* sigmoid用處:
a)因為sigmoid輸出的值是在0~1之間,所以適用於概率問題;也適用於圖像的RGB問題,因為RGB值是0~255之間
b)sigmoid的缺點:因為sigmoid函數在處於+∞和-∞時候,導數趨近於0,會使得數據處於更新非常緩慢(長時間loss保持不變的情況),即:梯度彌散問題。
* sigmoid函數的pytorch實現
2)tanh
輸出值在[-1, 1]之間
在RNN里面用得比較多
* tanh的求導推導過程
* tanh在pytorch中的實現
3)relu(Rectified Liner Unit,調整的線性流單元)
* 被大量的實驗證明,relu函數很適合做deep learning。
因為:z<0時,梯度是0,z>0時,梯度是1。因為在向后傳播時候,因為梯度是1,所以對於搜索最優解,梯度計算時候非常方便,也不會被放大和縮小,很難出現梯度彌散和梯度爆炸的情況。所以在神經網絡中優先使用此函數。
* relu在pytorch中的實現
三、Loss以及Loss的梯度
1、MSE(mean square error):均方差
pytorch中mse的求解方法:torch.norm().pow(2) # 要記得平方
* MSE求導
* 使用pytorch自動求導
1)法一:
使用torch.autograd.grad()
2)法二:
使用mse.backward()
* 注意w.norm(),w.grad(),w.grad().norm()的區別:
w.norm()是均方差的平方根
w.grad()是導數
w.grad().norm()是導數的均方差的平方根
2、Cross Entropy Loss:
Softmax:
* softmax特點:
1)輸出的所有值的范圍是0~1
2)所有概率之和等於1。(注:sigmoid函數,所有概率的和一般是不等於1的)
輸出概率最大值的 索引。
3)會將原有值之間的差距拉大。
* softmax求導:
1)當i=j時
2)當i ≠ j時
3)綜合
* softmax在pytorch中的實現
上圖中最后4行,分別表示:δp1/δai ,δp2/δai (i∈[0, 2])求偏導