PyTorch学习笔记之多层感知机
多层感知机也叫人工神经网络,除了输入输出层,它中间可以有多个隐含层。为实现多层感知机,先从梯度的知识开始了解。
什么是梯度
导数、偏微分均为标量,而梯度是向量。梯度的公式如下:
∇
f
=
(
∂
f
∂
x
1
;
∂
f
∂
x
2
;
⋯
;
∂
f
∂
x
n
)
\nabla{f} = (\frac{\partial f}{\partial x_1};\frac{\partial f}{\partial x_2};\cdots;\frac{\partial f}{\partial x_n})
∇f=(∂x1∂f;∂x2∂f;⋯;∂xn∂f)
常采用梯度下降法来求解函数最优值,即搜索全局最优解,迭代公式如下:
θ
t
+
1
=
θ
t
−
α
t
∇
f
(
θ
t
)
\theta_{t+1} = \theta_t-\alpha_t \nabla{f(\theta_t)}
θt+1=θt−αt∇f(θt)
对于凸函数,存在全局最优解,可利用梯度下降法求解得到。
但是当利用梯度下降法求解某函数的最优值时,可能会求得的解为鞍点。鞍点即在某个纬度上取到了局部最小值,而在另一个纬度上取到局部最大值。
影响梯度下降法求解全局最优解的因素有初始解以及学习率,初始解选择的不恰当,学习率选择的不合适,会使得全局最优解的搜索陷入局部最小值陷阱,因此需要采取合适的方法,以逃出局部最小值。
常见函数的梯度
激活函数
Loss及其梯度
1.求导的两种方法
MSE(均方差):
l
o
s
s
=
∑
[
y
−
(
x
w
+
b
)
]
2
loss = \sum [y-(xw+b)]^2
loss=∑[y−(xw+b)]2
(1) 利用autograd.grad()函数进行求导(对指定的参数进行求导)
代码例子如下:
x = torch.ones(1)
w = torch.full([1],2.0)
w.requires_grad_()
mse = F.mse_loss(torch.ones(1),x*w)
print(torch.autograd.grad(mse,[w]))
求解的结果为:
(tensor([2.],))
(2) 利用backward()函数求导(对所有参数进行一次性求导)
代码例子如下:
x = torch.ones(1)
w = torch.full([1],2.0)
w.requires_grad_()
mse = F.mse_loss(torch.ones(1),x*w)
mse.backward()
print(w.grad)
求解的结果为:
(tensor([2.],))
2.Softmax函数
经softmax函数处理过后的值,概率区间为[0,1],且所有值的概率值累加求和为1。
Softmax函数的换算公式为:
S ( y i ) = e y i ∑ j e y j S(y_i)=\frac{e^{y_i}} { \sum_j e^{y_j}} S(yi)=∑jeyjeyi
Softmax函数的梯度计算如下:
单层输出感知机梯度推导
多层输出感知机
MLP反向传播