按照損失函數的負梯度成比例地對系數(W 和 b)進行更新。根據訓練樣本的大小,有三種梯度下降的變體:
通過前面的介紹,我們可知人工神經網絡是由很多神經元組成的,每個神經元都有自己的權重w,表示在某項任務中,該神經元的重要程度。假設輸入數據為x,那麽預測值即為:
prediction = wx + b # b 是偏置量
訓練的過程,其實就是計算合適的w和b的過程。那麽,什麽樣的w和b是“合適”的呢?答案就是預測值與真實值相差不大。例如定義損失函數:
loss = sum(|(y_ - prediction)|)
即,真實值減去預測值,取絕對值後求和。訓練的過程,可以粗略的理解成:調節 w 和 b, 使 loss 盡可能小。對w和b參數的調節,就是優化器(optimizer)需要做的,這就是優化器的作用。
上面這種 loss 的定義只是一種比較簡單的例子,當然有其他定義方式。例如cross_entropy(交叉熵),它是用來描述兩種分布的接近程度的,越接近,交叉熵越小。
Tensorflow 官方提供了 7 種優化器:
下面介紹幾個常用的優化器的構造函數,構造函數告訴我們如何構建這些優化器。
tf.train.GradientDescentOptimizer.__init__(learning_rate,
use_locking=False, name='GrandientDescent')
# learning_rate:學習率
# use_locking:用鎖
# name:名字
tf.train.MomentumOptimizer.__init__(learning_rate, momentum,
use_locking=False, name='Momentum', use_nesterov=False)
# momentum: 動量,可以是一個張量,也可以是一個浮點數值
tf.train.AdamOptimizer.__init__(learning_rate=0.001, beta1=0.9,
beta2=0.999, epsilon=1e-08, use_locking=False, name='Adam')
# beta1, beta2:對第一和第二動量估計的指數衰減率,可以是張量,也可是是浮點數值。
# epsilon:非常小的常量。
iThome鐵人賽