梯度下降優化器(1)

2021-10-22 08:01:45 字數 1775 閱讀 1660

#編譯神經網路,指定優化器、損失函式,以及評估指標

ann.

compile

(optimizer =

'adam'

,# 優化器

loss =

'binary_crossentropy'

,# 損失函式

metrics =

['acc'])

# 評估指標

其中adam就是乙個優化器。優化器的引入和神經網路的特點有十分密切的關係。

在之前的學習中我們已經了解過了線性回歸和邏輯回歸,他們兩個在進行梯度優化的時候利用的是凸函式的性質。但是在神經網路中,由於區域性最低點鞍點(形狀類似馬鞍)的存在,損失函式變得非常複雜,先前的方法已經不再適用。下面我們將介紹幾種基本方法。

在實際應用中,人們發現區域性最低點的出現是可以接受的。如果每次訓練網路都進行權重的初始化,隨機賦值,那麼只要訓練次數足夠多,我們總能找到乙個相對優秀的區域性最低點。

對應python原始碼,引數隨機初始化的任務在keras中已經打包完成,如下圖所示。

ann.add(dense(64,

kernel_initializer =

'random_uniform'

,# 預設權重隨機初始化

bias_initializer =

'zeros'))

# 預設偏置值為0

除了上述的引數初始化方法,人們還開發了一系列優化器,下面我們將列舉幾個介紹他們的特點。

批量梯度下降(batch gradient descent,bgd)將資料拆分成一組組的小批量,進而通過向量化的計算方式進行處理。這大大提高的運算速度。

以下面**為例,批量大小為128,也就是同時訓練128個樣本。

history = model.fit(x_train, y_train,

# 指定訓練集

epochs=30,

# 指定輪次

batch_size=

128,

# 指定批量大小

validation_data=

(x_test, y_test)

)# 指定驗證集

當然批量大小設定需要考慮計算機效能。若批量太大,會超出cpu和gpu的負荷,效率反而下降。

bgd提高了效率,但其實並沒有區域性最低點的問題。因此人們又提出了另乙個優化方案:隨機梯度下降(stochastic gradient descent,sgd)。此處的隨機與引數的隨機初始化不同,而是每次只隨機選擇乙個樣本更新模型引數。因此,這種方法學習速度更快,所需輪次也更多。

顯然隨機梯度下降中,引數的更新梯度方向遠不如批量梯度下降精準,每次也不一定向著最低點進行。但是考慮一下我們設計的出發點:解決區域性最低點問題。這也是說,隨機波動正是我們需要的,這將增大我們「跳出」區域性最低點的概率,最終收斂於乙個更好的點,甚至是最低點。

sgd是早起神經網路中的常用優化器。在編譯網路時,可以指定sgd優化器。

ann.

compile

(loss = keras.losses.categorical_crossentropy,

optimizer = keras.optimizer.sgd())

# 指定sgd優化器

當然這種隨機梯度下降的方法也不是完全可靠的方法。我們不能保證每次引數的更新都朝著正確的方向。

優化演算法1 隨機梯度下降法

梯度下降公式很簡單 import numpy as np import torch from torchvision.datasets import mnist from torch.utils.data import dataloader from torch import nn from tor...

梯度下降 隨機梯度下降 批梯度下降

下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。梯度下降法流程 1 先對 隨機賦值,可以是乙個全零的向量。2 改變 的值,使j 按梯度下降的方向減少。以上式為例 1 對於我們的...

最優化 梯度下降法

最優化問題就是求解函式極值的問題,包括極大值和極小值,幾乎所有機器學習演算法歸根到底都是在求解最優化問題。在高等數學 微積分中有求極值統一的思路 找函式導數等於0的點,只要函式可導我們就可以用這種方法。在機器學習中我們一般求函式的極小值,若求極大值我們只需要整體加負號。有些時候我們會對優化變數x有約...