- 在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一定的情況下,不同部分損失函數所對應網絡結構的優化難易程度並不相同(例如體現在反向傳遞過程中梯度數量級的不同);為了保證訓練結束后損失函數的不同部分所對應的網絡結構都達到較為理想的訓練效果,需要為難以優化的部分添加較大的系數以增大梯度,加速收斂(意義就在於控制網絡不同部分的收斂速度,使得各部分能夠分別以最合適的速度優化)
- 分布差異一般較難優化,並且數據維度越高越難以優化