tensorflow(五) 優化器

2021-09-28 19:34:51 字數 3239 閱讀 1345

一、基礎知識

1.損失函式

損失函式是評估特定模型引數和特定輸入時,表達模型輸出的推理值與真實值之間不一致程度的函式。形式化定義如下:

其中xi是樣本,θ是模型引數,f(xi;θ)是模型**的值,y-i是真實的測試資料。f(xi;θ)越接近y-i,說明模型擬合越的接近真實值。

常見的損失函式有平方損失函式、交叉熵損失函式和指數損失函式:

2.經驗風險

使用損失函式對所有訓練樣本求損失值,再累加求平均值可得到模型的經驗風險,f(x)關於訓練集平均損失就是經驗風險,其形式化定義如下:

理想情況是經驗損失越小越好,但是,如果我們過分的追求低損失值,就是出現過擬合的現象。因為雖然損失值越小越好,但是我們不能保證訓練集能完全的代表真實場景。過分的低損失值,固然會很好的擬合訓練集,但是當兩者分布不一致時,最終結果是反而偏離了真實的情況,這時模型的泛化能力就會變差

所以,面對經驗風險時,一定要合理的衡量經驗風險。

3.結構風險最小化

模型訓練的目標是不斷最小化經驗風險。隨著訓練步數的增加,經驗風險將降低,模型複雜度也會上公升。為了降低過度訓練可能造成的過擬合風險,可以專門引入用來度量模型複雜度的正則化項(regularizer)或懲罰項(penaly term)—j(f),j(f)可以降低模型複雜度。常用的正則化項有l0\l1\l2範數。所以,我們將模型最優化的目標替換為魯棒性更好的結構風險最小化(srm)。如下圖:

其中,λ是正則化引數的權重。

4.最優模型引數

在模型訓練過程中,結構風險不斷低降低。當小於設定的損失值閾值(比如10^-6),則認為此時的模型已經滿足需求。因此,模型訓練的本質就是在最小化結構分析取得最優的模型引數。最優模型引數形式化定義如下:

θ*就是模型引數,他一系列引數的組成。

5.優化演算法

典型的機器學習和深度學習問題通常都需要轉換為最優化問題進行求解。

而求解最優化問題的演算法稱為優化演算法,他們通常採用迭代方式實現:首先設定乙個初始的可行解,然後基於特定的函式(模型就相當於乙個複雜的函式)反覆重新計算可行解,直到找到乙個最優解或達到預設的收斂條件。不同的優化演算法採取的迭代策略各有不同:

eg:梯度下降演算法是最簡單的優化演算法:

α是步長或者學習轉換率,grad(xk)xk是方向導數,函式沿著方向導數的負方向下降最快,所以,α前面是負號。

6.模型的訓練機制

二、優化器

1.優化器

優化器是實現優化演算法的載體。

計算梯度:呼叫compute_gradients方法

處理梯度:使用者按照自己需求處理梯度值,如梯度裁剪和梯度加權等

2.gradientdescentopertimizer優化器使用流程

基於optimizer優化器的優化器中,梯度下降優化器(gradientsdescentoptimizer)用的比較多。

下面是其應用的一般化方法:

(1)需要處理梯度值

# 1.構建優化器

optimizer = tf.train.gradientdescentoptimizer(learning_rate=

0.01

)# 構建優化器 learning_rate是學習轉換率

# 2.計算梯度var_list是變數列表

grads_and_vars = optimizer.compute_gradients(loss, var_list,..

.)# loss是損失值, var_list是變數列表

# 3.處理梯度

clip_grads_and_vars =

[(tf.clip_by_value(grad,

-1.0

,1.0

), var)

for grad, var in grads_and_vars]

# 4.應用梯度

# train_op是單步訓練後的最後操作,用會話執行train_op就相當於執行整個資料流圖

(2)不需要處理梯度值

# 1.構建優化器

optimizer = tf.train.gradientdescentoptimizer(learning_rate=

0.01

)# 2.設定變數

globel_step = tf.variable(

0, name=

'globel_step'

, trainable=

false

)# 3.計算並應用梯度模型

train_op = optimizer.minimize(loss, var_list,..

.)

3.tensorflow內建優化器路徑

Tensorflow學習 優化器

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input data 載入資料集 mnist input data.read data sets mnst data one hot true batch ...

tensorflow的優化器比較

標準梯度下降法 彙總所有樣本的總誤差,然後根據總誤差更新權值 隨機梯度下降 隨機抽取乙個樣本誤差,然後更新權值 每個樣本都更新一次權值,可能造成的誤差比較大 批量梯度下降法 相當於前兩種的折中方案,抽取乙個批次的樣本計算總誤差,比如總樣本有10000個,可以抽取1000個作為乙個批次,然後根據該批次...

tensorflow中的優化器

1.tf.train.gradientdescentoptimizer 標準梯度下降優化器 標準梯度下降先計算所有樣本彙總誤差,然後根據總誤差來更新權值 2.tf.train.adadeltaoptimizer adadelta優化器,在sgd的基礎上 3.tf.train.adagradoptim...