PyTorch学习笔记之多层感知机

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=(x1f;x2f;;xnf)

常采用梯度下降法来求解函数最优值,即搜索全局最优解,迭代公式如下:
θ t + 1 = θ t − α t ∇ f ( θ t ) \theta_{t+1} = \theta_t-\alpha_t \nabla{f(\theta_t)} θt+1=θtαtf(θt)

对于凸函数,存在全局最优解,可利用梯度下降法求解得到。
但是当利用梯度下降法求解某函数的最优值时,可能会求得的解为鞍点。鞍点即在某个纬度上取到了局部最小值,而在另一个纬度上取到局部最大值。
影响梯度下降法求解全局最优解的因素有初始解以及学习率,初始解选择的不恰当,学习率选择的不合适,会使得全局最优解的搜索陷入局部最小值陷阱,因此需要采取合适的方法,以逃出局部最小值。

常见函数的梯度

PyTorch学习笔记之多层感知机_第1张图片

激活函数

PyTorch学习笔记之多层感知机_第2张图片

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函数的梯度计算如下:
PyTorch学习笔记之多层感知机_第3张图片

单层输出感知机梯度推导

PyTorch学习笔记之多层感知机_第4张图片
PyTorch学习笔记之多层感知机_第5张图片

多层输出感知机

PyTorch学习笔记之多层感知机_第6张图片
PyTorch学习笔记之多层感知机_第7张图片

MLP反向传播

PyTorch学习笔记之多层感知机_第8张图片
PyTorch学习笔记之多层感知机_第9张图片
PyTorch学习笔记之多层感知机_第10张图片

你可能感兴趣的:(PyTorch深度学习笔记,深度学习,神经网络,pytorch)