深圳建工建設(shè)集團(tuán)有限公司網(wǎng)站seo站群軟件
學(xué)習(xí)率
? ? ? ? 學(xué)習(xí)率,控制著模型的學(xué)習(xí)進(jìn)度。模型訓(xùn)練過(guò)程中,如果學(xué)習(xí)率的值設(shè)置得比較大,訓(xùn)練速度會(huì)提升,但訓(xùn)練結(jié)果的精度不夠,損失值容易爆炸;如果學(xué)習(xí)率的值設(shè)置得比較小,精度得到了提升,但訓(xùn)練過(guò)程會(huì)耗費(fèi)太多的時(shí)間,收斂速度慢,同時(shí)也容易出現(xiàn)過(guò)擬合的情況。
退化學(xué)習(xí)率
? ? ? ? 退化學(xué)習(xí)率又叫學(xué)習(xí)率衰減或?qū)W習(xí)率更新。更新學(xué)習(xí)率是希望訓(xùn)練過(guò)程中,在精度和速度之間找到一個(gè)平衡,兼得學(xué)習(xí)率大核學(xué)習(xí)率小的優(yōu)點(diǎn)。即當(dāng)訓(xùn)練剛開(kāi)始時(shí)使用大的學(xué)習(xí)率加快速度,訓(xùn)練到一定程度后使用小的學(xué)習(xí)率來(lái)提高精度。
TensorFlow中常用的退化學(xué)習(xí)率方法
? ? ? ? ①指數(shù)衰減方法
? ? ? ? ? ? ? ? 指數(shù)衰減是較為常用的衰減方法,學(xué)習(xí)率是跟當(dāng)前的訓(xùn)練輪次指數(shù)相關(guān)的。
? ? ? ? ? ? ? ? tf.train.exponential_decay(learning_rate,global_step,decay_steps,decay_rate,staircase = False,name = None)
? ? ? ? ? ? ? ? 參數(shù)learning_rate為初始學(xué)習(xí)率;global_step為當(dāng)前訓(xùn)練輪次,即epoch;decay_steps用于定義衰減周期,跟參數(shù)staircese配合,可以在decay_step個(gè)訓(xùn)練輪次內(nèi)保持學(xué)習(xí)率不變;decay_rate為衰減率系數(shù);staircase用于定義是階梯型衰減,還是連續(xù)衰減,默認(rèn)是False,即連續(xù)衰減(標(biāo)準(zhǔn)的指數(shù)型衰減)。
? ? ? ? ? ? ? ? 指數(shù)衰減方法中學(xué)習(xí)率的具體計(jì)算公式如下:
? ? ? ? ? ? ? ? ? ? ? ? decayed_learning_rate = learning_rate*decay_rate^(global_step/decay_steps)
? ? ? ? ? ? ? ? 指數(shù)衰減方法中學(xué)習(xí)率的衰減軌跡如下圖:
????????????????????????
? ? ? ? ? ? ? ? ? ? ? ? 紅色的是階梯型指數(shù)衰減,在一定輪次內(nèi)學(xué)習(xí)率保持一致
? ? ? ? ? ? ? ? ? ? ? ? 綠色的是標(biāo)準(zhǔn)的指數(shù)衰減,即連續(xù)型指數(shù)衰減
? ? ? ? ②自然指數(shù)衰減方法
? ? ? ? ? ? ? ? 指數(shù)衰減的一種特殊情況,學(xué)習(xí)率也是跟當(dāng)前的訓(xùn)練輪次指數(shù)相關(guān),只不過(guò)是以e為底數(shù)。函數(shù)中的參數(shù)意義與指數(shù)衰減方法中的參數(shù)相同。
? ? ? ? ? ? ? ? tf.train.natural_exp_decay(learning_rate,global_step,decay_steps,decay_rate,staircase = False,name = None)
? ? ? ? ? ? ? ? 自然指數(shù)衰減方法中的學(xué)習(xí)率的具體計(jì)算公式如下:
? ? ? ? ? ? ? ? ? ? ? ? decayed_learning_rate = learning_rate*exp(-decay_rate*global_step)
? ? ? ? ? ? ? ? 自然指數(shù)衰減方法中學(xué)習(xí)率的衰減軌跡如下圖:
????????????????????????
? ? ? ? ? ? ? ? ? ? ? ? 左下部分的兩條曲線是自然指數(shù)衰減,右上部分的兩條曲線是指數(shù)衰減。可以明顯看到,自然指數(shù)衰減對(duì)學(xué)習(xí)率的衰減程度要遠(yuǎn)大于一般的指數(shù)衰減,它一般用于可以較快收斂的網(wǎng)絡(luò),或者是訓(xùn)練數(shù)據(jù)集比較大的場(chǎng)合。
? ? ? ? ③倒數(shù)衰減方法
? ? ? ? ? ? ? ? 訓(xùn)練過(guò)程中,倒數(shù)衰減方法不固定最小學(xué)習(xí)率,迭代次數(shù)越多,學(xué)習(xí)率越小。學(xué)習(xí)率的大小跟訓(xùn)練次數(shù)有一定的反比關(guān)系。
? ? ? ? ? ? ? ?tf.train.inverse_time_decay(learning_rate,global_step,decay_steps,decay_rate,staircase = False,name = None)
? ? ? ? ? ? ? ? 參數(shù)global_step為用于衰減計(jì)算的全局步數(shù),decay_steps為衰減步數(shù),decay_rate為衰減率,staircase用于定義是應(yīng)用離散階梯型衰減,還是連續(xù)衰減。
? ? ? ? ? ? ? ? 倒數(shù)衰減方法中學(xué)習(xí)率的具體計(jì)算公式如下:
? ? ? ? ? ? ? ? ? ? ? ? decayed_learning_rate = learning_rate/(1+decay_rate*global_step/decay_step)
? ? ? ? ? ? ? ? 倒數(shù)衰減方法中學(xué)習(xí)率的衰減軌跡如下圖:
????????????????????????
? ? ? ? ? ? ? ? ? ? ? ? 綠色的是離散階梯型衰減,紅色的是連續(xù)型衰減
????????④分段常數(shù)衰減方法
????????????????分段常數(shù)衰減可以針對(duì)不同任務(wù)設(shè)置不同的學(xué)習(xí)率,從而進(jìn)行精細(xì)調(diào)參。
????????????????tf.train.piecewise_constant(x,boundaries,values,name = None)
????????????????參數(shù)x是標(biāo)量,指的是global_step,即訓(xùn)練次數(shù);boundaries為學(xué)習(xí)率參數(shù)應(yīng)用區(qū)間列表,即迭代次數(shù)所在的區(qū)間;values為學(xué)習(xí)率列表,存放在不同區(qū)間該使用的學(xué)習(xí)率的值。需要注意 : values的長(zhǎng)度比boundaries的長(zhǎng)度多1,因?yàn)閮蓚€(gè)數(shù)可以制定出三個(gè)區(qū)間,有三個(gè)區(qū)間要用3個(gè)學(xué)習(xí)率。
????????????????分段常數(shù)衰減方法中學(xué)習(xí)率的衰減軌跡如下圖:
???????????????????????????????
????????????????????????每個(gè)區(qū)間內(nèi),學(xué)習(xí)率的值是不一樣的
????????⑤多項(xiàng)式衰減方法
????????????????多項(xiàng)式衰減方法的原理為 : 定義一個(gè)初始的學(xué)習(xí)率和一個(gè)最低的學(xué)習(xí)率,然后按照設(shè)置的衰減規(guī)則,學(xué)習(xí)率從初始學(xué)習(xí)率逐漸降低到最低的學(xué)習(xí)率,并且可以定義學(xué)習(xí)率降低到最低的值之后,是一直保持使用這個(gè)最低的學(xué)習(xí)率,還是再升高到一定的值,然后再降低到最低的學(xué)習(xí)率,循環(huán)反復(fù)這個(gè)過(guò)程。
? ? ? ? ? ? ? ? tf.train.polynomial_decay(learning_rate,global_step,decay_steps,end_learning_rate = 0.0001,power = 1.0,cycle = False,name = None)
? ? ? ? ? ? ? ? 參數(shù)global_step為當(dāng)前訓(xùn)練輪次,即epoch;decay_steps為定義衰減周期;end_learning_rate是最小的學(xué)習(xí)率,默認(rèn)值是0.0001;power是多項(xiàng)式的冪,默認(rèn)值是1,即線性的。cycle用于定義學(xué)習(xí)率是否到達(dá)最低學(xué)習(xí)率后升高,然后再降低,默認(rèn)False,保持最低的學(xué)習(xí)率。
? ? ? ? ? ? ? ? 一般情況下多項(xiàng)式衰減方法中學(xué)習(xí)率的具體計(jì)算公式如下:
? ? ? ? ? ? ? ? ? ? ? ? global_step = min(global_step,decay_steps)
? ? ? ? ? ? ? ? ? ? ? ? decayed_learning_rate = (learning_rate - end_learning_rate) * (1 - global_step / decay_steps)^(power) + end_learning_rate
? ? ? ? ? ? ? ? 如果定義cycle為True,學(xué)習(xí)率在到達(dá)最低學(xué)習(xí)率后反復(fù)升高降低,學(xué)習(xí)率計(jì)算公式如下:
? ? ? ? ? ? ? ? ? ? ? ? decay_steps = decay_steps * ceil(global_step / decay_steps)
? ? ? ? ? ? ? ? ? ? ? ? decayed_learning_rate = (learning_rate - end_learning_rate) * (1?- global_step / decay_steps)^(power) + end_learning_rate
? ? ? ? ? ? ? ? 多項(xiàng)式衰減方法中學(xué)習(xí)率的衰減軌跡如下圖:
????????????????????????
? ? ? ? ? ? ? ? ? ? ? ? 紅色的為cycle = False時(shí)的情況,下降后不再上升,保持不變;綠色的為cycle = True時(shí)的情況,下降后反復(fù)升降。
? ? ? ? ? ? ? ? 多項(xiàng)式衰減中設(shè)置學(xué)習(xí)率反復(fù)升降的目的是為了防止神經(jīng)網(wǎng)絡(luò)后期訓(xùn)練的學(xué)習(xí)率過(guò)小,導(dǎo)致網(wǎng)絡(luò)參數(shù)陷入某個(gè)局部,找不到最優(yōu)解;設(shè)置學(xué)習(xí)率升高機(jī)制,有可能使網(wǎng)絡(luò)找出局部最優(yōu)解。
指數(shù)衰減示例代碼如下:
import tensorflow.compat.v1 as tf
tf.compat.v1.disable_v2_behavior()global_step = tf.Variable(0,trainable=False)
#定義初始學(xué)習(xí)率
initial_learning_rate = 0.1
#使用指數(shù)衰減方法
learning_rate = tf.train.exponential_decay(initial_learning_rate,global_step,decay_steps = 20,decay_rate = 0.8)#定義一個(gè)操作,global_step每次加1后完成計(jì)步
opt = tf.train.GradientDescentOptimizer(learning_rate)
add_global = global_step.assign_add(1)init = tf.global_variables_initializer()
with tf.Session() as sess:sess.run(init)print(sess.run(learning_rate))#循環(huán)20次,將每次的學(xué)習(xí)率打印出來(lái)for i in range(20):g,rate = sess.run([add_global,learning_rate])print(g,rate)