pytorch教程龙曲良26-30
26什么是梯度1
導數(在給定方向的變化量)和偏微分(在給定的自變量上的變化量)都是標量,只有大小沒有方向
梯度就是所有偏微分的向量,有方向有大小
函數梯度是一個向量,向量方向表示這個函數在當前點的一個增長方向,向量的模/長度表示增長速率
這里的a是lr,這里初始化(0,0)剛好取到極小值
當lr太大的話會更新太快跳到箭頭所指的地方,顯然不是我們想要的情況
27什么是梯度2
總是有z1>z2,就是凸函數(碗一樣),可以找到全局最優解,但是這種情況在現實中不常見
存在多個局部最小值
resnet56
網絡很深可能平面會很粗糙陷入局部最小值,resnet56加了shortcut(走捷徑)使得平面變得光滑,這樣可以找到全局最小值
陷入鞍點
不是最大值也不是最小值,或者在x維度取局部最小值,在y維度上取局部最大值,比搜索到局部最小值更可怕,可能就陷在鞍點
Optimizer Performance哪些因素會影響搜索全局最小值的過程
? initialization status
? learning rate
? momentum#動量 怎么逃離局部最小值
? etc.
initialization status
圖一初始狀態從左邊開始,找到局部最小值;
初始狀態從右邊開始,找到全局最小值,而且二者搜索的步數也不同
初始化可以按照主流的初始化方法,何愷明初始方法
learning rate
lr太大 ,即步長太大可能會直接跨過最小值跨到另一邊去,這樣可能不收斂,所以lr要設置小一點,0.01,0.001,如果收斂可以大一點這樣收斂速度快一點。lr不僅影響速度還影響精度,lr過大可能會使得在最小值附近震蕩,不能達到最小值,所以應該設置再小一點
momentum
逃出局部最小值
可能會在一個小坑里徘徊但是如果慣性夠大就可以沖出去,到達更小的坑去
28常見函數的梯度
單層感知機
29激活函數與loss的梯度1
問題:單層感知機激活函數不可導
sigmoid/logistic
sigmoid函數的求導,可以求出一個其對x的導數,且其連續光滑,把負無窮到正無窮的值壓縮在0-1之間,如概率和RGB像素點。問題是:趨向正無窮,導數接近于0,loss的值長時間得不到更新,梯度離散。
torch.nn.function as F
Tanh[-1,1]
Relu
非常適合做deep learning,所以都優先使用relu函數
因為x>0 梯度是1
保持梯度不變,減少出現梯度離散或梯度爆炸的情況
30激活函數與loss的梯度2
Typical Loss
? Mean Squared Error
? Cross Entropy Loss
? binary
? multi-class
? +softmax
? Leave it to Logistic Regression Part
如果使用torch.norm的函數要要這樣使用(因為其默認是L2-norm,有開方),要加一個平方:torch.norm(y-pred,2).pow(2)
w初始化為一個長度為1 ,維度為1,值為2的一個tensor
backward會記錄這個圖的所有路徑,在最后結點調用backward會自動的從后往前傳播,完成這條路上所有需要梯度的計算,會把這些梯度信息附加每個tensor的成員.grad上 如w.grad和b.grad
注意要區分w.norm()還是w.grad.norm()
torch.autograd.grad()返回的是各個w的梯度的列表
loss.backward() 可是直接指定wi.grad
總結
以上是生活随笔為你收集整理的pytorch教程龙曲良26-30的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch教程龙曲良21-25
- 下一篇: pytorch教程龙曲良31-35