图解深度学习-梯度下降学习率可视化
生活随笔
收集整理的這篇文章主要介紹了
图解深度学习-梯度下降学习率可视化
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
圖解深度學(xué)習(xí)-梯度下降學(xué)習(xí)率可視化
- 梯度下降學(xué)習(xí)率問題
梯度下降學(xué)習(xí)率問題
用最簡(jiǎn)單的SGD做實(shí)驗(yàn),討論學(xué)習(xí)率問題。
學(xué)習(xí)率如果太小,則會(huì)下降很慢,需要很多次迭代,如果太大,就會(huì)出現(xiàn)發(fā)散,具體可以動(dòng)手調(diào)試,也可以看截圖。
這里我選取的代價(jià)函數(shù)J(x)=0.5(x?1)2+0.5J(x) = 0.5 (x-1)^2 + 0.5J(x)=0.5(x?1)2+0.5,求導(dǎo)方便。
import numpy as np import matplotlib.pyplot as plt from ipywidgets import *#梯度函數(shù)的導(dǎo)數(shù) def gradJ(theta):return theta-1#梯度函數(shù) def J(theta):return 0.5*(theta-1)**2+0.5def train(lr,epoch,theta):thetas = []for i in range(epoch):gredient = gradJ(theta)theta = theta - lr*gredientthetas.append(theta)plt.figure(figsize=(10,10))x = np.linspace(-1,3,100)plt.plot(x, J(x))plt.plot(np.array(thetas),J(np.array(thetas)),color='r',marker='o')plt.plot(1.0, 0.5, 'r*',ms=15)plt.text(1.0, 0.55, 'min', color='k')plt.text(thetas[0]+0.1, J(thetas[0]), 'start', color='k')plt.text(thetas[-1]+0.1, J(thetas[-1])-0.05, 'end', color='k')plt.xlabel('theta')plt.ylabel('loss')plt.show()print('theta:',theta)print('loss:',J(theta))#可以隨時(shí)調(diào)節(jié),查看效果 (最小值,最大值,步長(zhǎng)) @interact(lr=(0, 5, 0.001),epoch=(1,100,1),init_theta=(-1,3,0.1),continuous_update=False) def visualize_gradient_descent(lr=0.05,epoch=10,init_theta=-1):train(lr,epoch,init_theta) 學(xué)習(xí)率:0.05 迭代次數(shù):10 參數(shù)初始化:-1 10次迭代還沒到最小值 學(xué)習(xí)率:0.33 迭代次數(shù):10 參數(shù)初始化:-1 10次迭代接近收斂了,可見加大學(xué)習(xí)率可以加快訓(xùn)練 學(xué)習(xí)率:1.87 迭代次數(shù):10 參數(shù)初始化:-1 軌跡開始波動(dòng)了,梯度方向不停的在變,最后還沒到收斂。解釋下梯度方向?yàn)槭裁撮_始變了,根據(jù)公式theta= theta- lr*gredient, 可以看到開始theta大致為2.7,梯度為正數(shù)大致為2,然后學(xué)習(xí)率又1.87 , theta=2.7 - 2 x 1.87<0 即theta變?yōu)樨?fù)數(shù)了,所有到曲線右邊了, 同理繼續(xù)更新,此時(shí)梯度為負(fù)數(shù)了,減去一個(gè)負(fù)數(shù)等于加上正數(shù),theta變?yōu)檎龜?shù), 所以又到曲線右邊,如此循環(huán),直到最低點(diǎn)。 如此一來,來回波動(dòng)很多次,所以收斂速度變慢了。我們當(dāng)然希望它跟上面一樣是從一個(gè)方向一直下降。 學(xué)習(xí)率:2.18 迭代次數(shù):10 參數(shù)初始化:-1 繼續(xù)加到學(xué)習(xí)率,直到變得不收斂,我把坐標(biāo)范圍拉大了,看了清楚,已經(jīng)開始發(fā)散了。原因是因?yàn)?#xff0c;學(xué)習(xí)率過大,使得更新后的theta無論正負(fù),絕對(duì)值會(huì)越來越大,會(huì)開始往上跑,再加上越上面的梯度絕對(duì)值越來越大,所以每次更新完之后theta的絕對(duì)值繼續(xù)變大,就無限循環(huán)了,不收斂了。具體可見下圖。 把一些參數(shù)打出來了,可以看到,負(fù)值和正值絕對(duì)值都在變大,因?yàn)榈蟪霈F(xiàn)折線發(fā)散。修改后的jupyter的文件鏈接
好了,今天就到這里了,希望對(duì)學(xué)習(xí)理解有幫助,大神看見勿噴,僅為自己的學(xué)習(xí)理解,能力有限,請(qǐng)多包涵。
總結(jié)
以上是生活随笔為你收集整理的图解深度学习-梯度下降学习率可视化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CISCO网络故障排错命令总结分享
- 下一篇: 【算法升级】仅有85K个参数的开源人脸检