网络训练过程中:学习率/lr、损失函数的系数/lossCoeff、训练代数/epoch,与模型收敛之间的关系
- 在epoch超过阈值的前提下,\(lr*lossCoeff*epoch\)的值也超过一定的阈值,才能使得训练结束后模型收敛。
from tqdm import tqdm
data1 = torch.nn.Parameter(torch.randn(3, 2048))
data2 = torch.ones(3, 2048)
epoch = 150
lr = 1
lossCoeff = 10
for i in tqdm(range(epoch)):
try:
data1.grad.zero_()
except:
pass
loss = torch.nn.PairwiseDistance(p=2)(data1, data2).mean()*lossCoeff
loss.backward()
# print(data1.grad)
data1 = torch.nn.Parameter(data1 - lr*data1.grad)
print(data1)
print(data2)
- 在上面这个例子中,满足\(epoch\geq150\)的前提,\(epoch*lr*lossCoeff=1500\)都可以满足最终data1的值≈1。
- 一定范围内,epoch的值越大,lr和lossCoeff越小,data1的值与1越接近。(比如\(epoch=150000,lr=0.1,lossCoeff=0.1\))
- 这也揭示了损失函数比较复杂时,为损失函数不同部分添加不同系数的意义:在epoch、lr一定的情况下,不同部分损失函数所对应网络结构的优化难易程度并不相同(例如体现在反向传递过程中梯度数量级的不同);为了保证训练结束后损失函数的不同部分所对应的网络结构都达到较为理想的训练效果,需要为难以优化的部分添加较大的系数以增大梯度,加速收敛(意义就在于控制网络不同部分的收敛速度,使得各部分能够分别以最合适的速度优化)
- 分布差异一般较难优化,并且数据维度越高越难以优化
行动是治愈恐惧的良药,而犹豫拖延将不断滋养恐惧。