DL之DNN优化技术:神经网络算法简介之GD/SGD算法的简介、代码实现、代码调参之详细攻略
生活随笔
收集整理的這篇文章主要介紹了
DL之DNN优化技术:神经网络算法简介之GD/SGD算法的简介、代码实现、代码调参之详细攻略
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
DL之DNN優化技術:神經網絡算法簡介之GD/SGD算法的簡介、代碼實現、代碼調參之詳細攻略
?
?
目錄
GD算法的簡介
GD/SGD算法的代碼實現
1、Matlab編程實現
GD算法的改進算法
GD算法中的超參數
?
?
GD算法的簡介
? ? ? GD算法,是求解非線性無約束優化問題的基本方法,最小化損失函數的一種常用的一階優化方法。如圖所示,找出最陡峭的方向作為下山的方向。
1、如何求梯度?
沿著梯度方向,函數值下降最快。
2、二元曲面
具有兩個輸入權重的線性神經元的誤差曲面,Error surface of a linear neuron with two input weights
3、GD算法容易陷入局部最小值
?
?
GD/SGD算法的代碼實現
1、Matlab編程實現
%% 最速下降法圖示 % 設置步長為0.1,f_change為改變前后的y值變化,僅設置了一個退出條件。 syms x;f=x^2; step=0.1;x=2;k=0; %設置步長,初始值,迭代記錄數 f_change=x^2; %初始化差值 f_current=x^2; %計算當前函數值 ezplot(@(x,f)f-x.^2) %畫出函數圖像 axis([-2,2,-0.2,3]) %固定坐標軸 hold on while f_change>0.000000001 %設置條件,兩次計算的值之差小于某個數,跳出循環x=x-step*2*x; %-2*x為梯度反方向,step為步長,!最速下降法!f_change = f_current - x^2; %計算兩次函數值之差f_current = x^2 ; %重新計算當前的函數值plot(x,f_current,'ro','markersize',7) %標記當前的位置drawnow;pause(0.2);k=k+1; end hold off fprintf('在迭代%d次后找到函數最小值為%e,對應的x值為%e\n',k,x^2,x)2、基于python實現SGD算法
class SGD:def __init__(self, lr=0.01):self.lr = lr #學習率,實例變量#update()方法,在SGD中會被反復調用def update(self, params, grads):for key in params.keys():params[key] -= self.lr * grads[key] #參數params、grads依舊是字典型變量,按params['W1']、grads['W1']的形式,分別保存了權重參數和它們的梯度。'偽代碼:神經網絡的參數的更新' network = TwoLayerNet(...) optimizer = SGD() for i in range(10000):...x_batch, t_batch = get_mini_batch(...) # mini-batchgrads = network.gradient(x_batch, t_batch)params = network.paramsoptimiz?
?
GD算法的改進算法
1、SGD算法
(1)、mini-batch
如果不是每拿到一個樣本即更改梯度,而是若干個樣本的平均梯度作為更新方向,則是mini-batch梯度下降算法。
(1)、SGD與學習率、Rate、Loss
?
?
GD算法中的超參數
1、學習率
(1)、固定學習率實驗的C代碼
(2)、回溯線性搜索(Backing Line Search)
(3)、二次插值線性搜索:回溯線性搜索的思考——插值法,二次插值法求極值
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的DL之DNN优化技术:神经网络算法简介之GD/SGD算法的简介、代码实现、代码调参之详细攻略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TF之DNN:对DNN神经网络进行Ten
- 下一篇: TF之CNN:利用sklearn(自带手