深度神经网络——深度学习的优化方法

梯度下降算法

见机器学习那块
在这里插入图片描述

import tensorflow as tf

opt=tf.keras.optimizers.SGD(learning_rate=0.1)
#定义要更新的参数
var=tf.Variable(1.0)
#定义损失函数
loss=lambda:(var**2)/2.0
#计算损失梯度,并进行参数更新
opt.minimize(loss,[var])
#参数更新结果
var.numpy()

0.9
在这里插入图片描述

反向传播算法(BP算法)

前向传播与反向传播

前向传播
是指数据输入的神经网络中,逐层向前传输,一直到运算到输出层为止

在网络的训练过程中经过前向传播后得到的最终结果跟训练样本的真实值总是存在一定误差,这个误差便是损失函数。想要减少这个误差,就用损失函数ERROR,从后往前,依次求各个参数的偏导,这就是反向传播(Back Propagation)

链式法则

在这里插入图片描述

反向传播算法

在这里插入图片描述

梯度下降优化方法

在这里插入图片描述

动量算法(Momentum)

主要解决鞍点问题,对梯度值进行修正
在这里插入图片描述
在这里插入图片描述

opt=tf.keras.optimizers.SGD(learning_rate=0.1,momentum=0.9)
#定义要更新的参数
var=tf.Variable(1.0)
val0=var.value()
#定义损失函数
loss=lambda:(var**2)/2.0
#第一次更新
opt.minimize(loss,[var])
val1=var.value()
#第二次更新
opt.minimize(loss,[var])
val2=var.value()
val0,val1,val2

(<tf.Tensor: shape=(), dtype=float32, numpy=1.0>,
<tf.Tensor: shape=(), dtype=float32, numpy=0.9>,
<tf.Tensor: shape=(), dtype=float32, numpy=0.71999997>)

AdaGrad

对学习率进行修正
在这里插入图片描述
在这里插入图片描述

opt=tf.keras.optimizers.Adagrad(learning_rate=0.1,initial_accumulator_value=0.1,epsilon=1e-06)
#定义要更新的参数
var=tf.Variable(1.0)
#定义损失函数
def loss():
    return (var**2)/2.0
#第一次更新
opt.minimize(loss,[var])
var

<tf.Variable ‘Variable:0’ shape=() dtype=float32, numpy=0.9046538>

RMSprop

用于解决AdaGrad算法在迭代后期由于学习率过小,较难找到最优解的问题,也是对学习率进行修正

在这里插入图片描述
在这里插入图片描述

opt=tf.keras.optimizers.RMSprop(learning_rate=0.1,rho=0.9)
#定义要更新的参数
var=tf.Variable(1.0)
#定义损失函数
def loss():
    return (var**2)/2.0
#第一次更新
opt.minimize(loss,[var])
var

<tf.Variable ‘Variable:0’ shape=() dtype=float32, numpy=0.6837724>

Adam

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

opt=tf.keras.optimizers.Adam(learning_rate=0.1)
#定义要更新的参数
var=tf.Variable(1.0)
#定义损失函数
def loss():
    return (var**2)/2.0
#第一次更新
opt.minimize(loss,[var])
var

<tf.Variable ‘Variable:0’ shape=() dtype=float32, numpy=0.900001>

总结

常用动量法和adam算法,但其中adam容易造成梯度爆炸的情况

学习率退火

在这里插入图片描述

分段常数衰减

在这里插入图片描述
在这里插入图片描述

#boundaries是设置分段更新的step值,values是针对不同分段的学习率值
tf.keras.optimizers.schedules.PiecewiseConstantDecay(boundaries,values)

指数衰减

在这里插入图片描述

tf.keras.optimizers.schedules.ExponentialDecay(initial_learning_rate,decay_steps,decay_rate)

在这里插入图片描述

1/t衰减

在这里插入图片描述

tf.keras.optimizers.schedules.InverseTimeDecay(initial_learning_rate,decay_steps,decay_rate)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40527560/article/details/131494144