2021-2022 春学期人工智能-作业1:配置PyTorch环境并利用PyTorch实现反向传播
Posted Rain Sure
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-2022 春学期人工智能-作业1:配置PyTorch环境并利用PyTorch实现反向传播相关的知识,希望对你有一定的参考价值。
1. 安装Python运行环境和Pycharm
安装Pycharm, 配置好Python开发环境。
由于之前使用Django框架进行Web开发时,已经安装过Pycharm并且配置过Python3的环境,在此就不再次配置了,只做一下展示~,Python版本为3.6.3。
2.安装PyTorch
(1) 安装PyTorch
首先,进入PyTorch的官网,找到对应的下载位置。操作系统根据自己的系统进行选择,我的是Window10,于是选择Windows,安装方式我选择的是pip方法,语言自然选择Python,因为我的显卡是因特尔的显卡,所以选择CUDA11.3,然后复制下方的链接到本机的控制台进行安装。
将安装命令粘贴到控制台后,按下回车就开始下载了,时间可能会有些长,需要多等一会儿~。
经过耐心的等待后,安装终于结束了。。。
然后,进行测试,验证是否成功安装。
经过验证,安装成功!
3. 实现反向传播
1. 反向传播算法介绍
在开始写代码之前,我们先简单介绍一下反向传播算法。
简介
无论是机器学习还是深度学习,都绕不开一个梯度下降。深度学习的大致步骤为:
- 构建神经网络
- 数据拟合
- 选出最佳模型
其中,选出最佳模型的方式,其实就是利用梯度下降算法,选出损失函数最小的那个。在传统的机器学习中,这个比较容易实现。但是在深度学习中,由于存在输入层,隐藏层,输出层,且隐藏层到底有多深,这些都是未知数,因此计算也会更加繁琐。如果,在输出层输出的数据和我们设定的目标及标准相差比较大,这个时候,就需要反向传播。利用反向传播,逐层求出目标函数对各神经元权值的偏函数,构成目标函数对权值向量的梯度,之所以算这个,是为了对权值的优化提供依据,等权值优化了之后,再转为正向传播,直到输出的结果达到设定的标准。
反向传播原理
(1) 导数的链式法则
反向传播的原理其实很好理解,主要的理论就是我们在高等数字中学的导数计算:
假
设
y
=
f
(
x
)
,
z
=
g
(
y
)
,
那
么
有
:
d
z
d
x
=
d
z
d
y
d
y
d
x
假设 y = f(x), z = g(y), 那么有:\\frac dz dx = \\frac dz dy \\frac dy dx
假设y=f(x),z=g(y),那么有:dxdz=dydzdxdy
假
设
有
x
=
f
(
u
)
,
y
=
g
(
u
)
,
z
=
h
(
x
,
y
)
,
那
么
有
:
d
z
d
u
=
δ
z
δ
x
d
x
d
u
+
δ
z
δ
y
d
y
d
u
假设有 x = f(u), y = g(u), z = h(x, y), 那么有: \\frac dz du = \\frac \\delta z \\delta x \\frac dx du + \\frac \\delta z \\delta y \\frac dy du
假设有x=f(u),y=g(u),z=h(x,y),那么有:dudz=δxδzdudx+δyδzdudy
(2) 正向传播与反向传播
正向传播(forward propagation) 是指对神经网络沿着从输入层到输出层的顺序,依次计算并存储模型的中间变量(包括输出)。
以逻辑回归中的神经元为例:
在这个神经元中,
z
=
w
1
x
1
+
w
2
x
2
+
b
z = w_1 x_1 + w_2 x_2 + b
z=w1x1+w2x2+b
S
i
g
m
o
i
d
函
数
:
y
=
σ
(
z
)
Sigmoid函数: y = \\sigma(z)
Sigmoid函数:y=σ(z)
我们知道,无论是机器学习还是深度学习,计算之后都会产生一定的损失值,我们把这个损失函数记为
l
l
l。
反向传播的最终目的是修正权值
w
w
w,我们让
l
l
l 对
w
w
w求偏导,根据链式法则:
δ
l
δ
w
=
δ
l
δ
z
δ
z
δ
w
\\frac \\delta l \\delta w = \\frac \\delta l \\delta z \\frac \\delta z \\delta w
δwδl=δzδlδwδz
计算结果:
δ
z
δ
w
1
=
x
1
,
δ
z
δ
w
2
=
x
2
\\frac \\delta z \\delta w _1 = x_1, \\frac \\delta z \\delta w_2 = x_2
δw1δz=x1,δw2δz=x2
而
x
1
x_1
x1,
x
2
x_2
x2其实就是最开始的输入值,可以当做已知的,这个计算过程就是正向传播。
但是,计算反向传播就会很复杂,反向传播(back-propagation)指的是计算神经网络参数梯度的方法。总的来说,反向传播依据微积分中的链式法则,沿着从输出层到输入层的顺序,依次计算并存储对输入或输出目标函数有关神经网络各层的中间变量以及参数的梯度。对输入或输出
X
,
Y
,
Z
X, Y, Z
X,Y,Z为任意形状张量的函数
Y
=
f
(
X
)
和
Z
=
g
(
Y
)
Y = f(X)和Z = g(Y)
Y=f(X)和Z=g(Y), 通过链式法则,我们有:
δ
Z
δ
X
=
p
r
o
d
(
δ
Z
δ
Y
,
δ
Y
δ
X
)
\\frac \\delta Z \\delta X = prod(\\frac \\delta Z \\delta Y, \\frac \\delta Y \\delta X)
δXδZ=prod(δYδZ,δXδY)
首先,分别计算目标函数
J
=
L
+
s
J = L + s
J=L+s 有关损失项L和正则项s的梯度。
δ
J
δ
L
=
1
,
δ
J
δ
s
=
1.
\\frac \\delta J \\delta L = 1, \\frac \\delta J \\delta s = 1.
δLδJ=1,δsδJ=1.
其次,依据链式法则计算目标函数有关输出层的梯度
δ
J
δ
o
\\frac \\delta J \\delta o
δoδJ
δ
J
δ
o
=
p
r
o
d
(
δ
J
δ
L
,
δ
L
δ
o
)
=
δ
L
δ
o
\\frac \\delta J \\delta o = prod(\\frac \\delta J \\delta L, \\frac \\delta L \\delta o) = \\frac \\delta L \\delta o
δoδJ=prod(δLδJ,δoδL)=δoδL
接下来,计算正则项有关两个参数的梯度:
δ
s
δ
W
(
1
)
=
λ
W
(
1
)
,
δ
s
δ
W
(
2
)
=
λ
W
(
2
)
,
\\frac \\delta s \\delta W^(1) = \\lambda W^(1), \\frac \\delta s \\delta W^(2) = \\lambda W^(2),
δW(1)山东大学 软件学院 2021-2022 春季学期 《大数据安全》期末考题
山东大学 软件学院 2021-2022 春季学期 《大数据安全》期末考题
山东大学 软件学院 2021-2022 春季学期 《大数据安全》期末考题