1. 程式人生 > 其它 >leetcode每日一題 821. 字元的最短距離

leetcode每日一題 821. 字元的最短距離

目錄

1. SGD

1.1 weight_decay

既不是為了提高精確度也不是提高收斂速度,目的是防止過擬合. 損失函式中,weight decay是放在正則項(regularization)前面的一個係數,正則項一般指示模型的複雜度,所以weight decay的作用是調節模型複雜度對損失函式的影響,若weight decay很大,則複雜的模型損失函式的值也就大

import torch
import numpy as np

np.random.seed(123)
np.set_printoptions(8, suppress=True)

x_numpy = np.random.random((3, 4)).astype(np.double)
w_numpy = np.random.random((4, 5)).astype(np.double)
x_torch = torch.tensor(x_numpy, requires_grad=True)
w_torch = torch.tensor(w_numpy, requires_grad=True)
print('Original weights', w_torch)
lr = 0.1
sgd = torch.optim.SGD([w_torch], lr=lr, weight_decay=0)
y_torch = torch.matmul(x_torch, w_torch)
loss = y_torch.sum()
sgd.zero_grad()
loss.backward()
sgd.step()
w_grad = w_torch.grad.data.numpy()
print('0 weight decay', w_torch)

#######################################################
w_torch = torch.tensor(w_numpy, requires_grad=True)
print('Reset Original weights', w_torch)
sgd = torch.optim.SGD([w_torch], lr=lr, weight_decay=1)
y_torch = torch.matmul(x_torch, w_torch)
loss = y_torch.sum()
sgd.zero_grad()
loss.backward()
sgd.step()
w_grad = w_torch.grad.data.numpy()
print('1 weight decay', w_torch)

1.2 momentum

梯度下降法中一種常用的加速技術,一般的SGD,其表示式為
,x沿負梯度方向下降。而帶momentum項的SGD則寫生如下形式:
其中即momentum係數,通俗的理解上面式子就是,如果上一次的momentum(即)與這一次的負梯度方向是相同的,那這次下降的幅度就會加大,所以這樣做能夠達到加速收斂的過程