深度学习(27)随机梯度下降五: 单输出感知机梯度
Recap
- y = X W + b y=XW+b y=XW+b
-
y
=
∑
x
i
∗
w
i
+
b
y=∑x_i*w_i+b
y=∑xi∗wi+b
1. Perceptrnon with Sigmoid + MSE
注:
(1)
x
i
0
x_i^0
xi0:
x
x
x表示输入层的元素,上角标表示第几层(0表示第0层),下角标表示第几个元素(
n
n
n表示第
n
n
n个元素);
(2)
w
i
j
1
w_{ij}^1
wij1:
w
w
w表示权值,上角标表示第几个隐藏层(1表示第1个隐藏层),下角标i表示连接上一层的第i个元素,
j
j
j表示连接下一层的第
j
j
j个元素(由于上图中第1层共有1个元素,所以连接第0层和第1层的权重的下角标中的
j
j
j值都为0,代表第0个元素);
(3)
x
0
1
x_0^1
x01: 上角标1表示第1层,
x
x
x表示经过第0输入
x
x
x和第1层隐藏层得到的输出值,下角标0表示第0个元素,因为这节课讨论单输出,所以只有1个元素;
(4)
O
0
1
O_0^1
O01:
O
O
O表示
x
x
x经过激活函数的输出值,上角标表示第几层,1表示第1层的
x
x
x经过激活函数得到
O
O
O,下角标0表示第0个元素;
(5)
t
t
t:
t
a
r
g
e
t
target
target,即目标值,标签值,label值;
(6)
E
E
E: 即
l
o
s
s
loss
loss,E=〖(O_01-t)〗2;
2. Derivative
- 损失函数
l
o
s
s
loss
loss为:
E = 1 2 ( O 0 1 − t ) 2 E=\frac{1}{2} (O_0^1-t)^2 E=21(O01−t)2
注: 这里的 1 2 \frac{1}{2} 21是为了求导的时候和平方抵消掉,写不写不影响结果(梯度的单调性不会改变); - 对
w
j
0
w_{j0}
wj0求偏导数:
∂ E ∂ w j 0 = ( O 0 1 − t ) ∂ O 0 ∂ w j 0 \frac{∂E}{∂w_{j0}}=(O_0^1-t)\frac{∂O_0}{∂w_{j0}} ∂wj0∂E=(O01−t)∂wj0∂O0 -
O
0
=
σ
(
x
0
)
O_0=σ(x_0)
O0=σ(x0):
∂ E ∂ w j 0 = ( O 0 1 − t ) ∂ σ ( x 0 ) ∂ w j 0 \frac{∂E}{∂w_{j0}}=(O_0^1-t)\frac{∂σ(x_0)}{∂w_{j0}} ∂wj0∂E=(O01−t)∂wj0∂σ(x0) -
∂
σ
(
x
0
)
∂
w
j
0
=
∂
σ
(
x
0
)
∂
x
0
⋅
∂
x
0
∂
w
j
0
\frac{∂σ(x_0)}{∂w_{j0}}=\frac{∂σ(x_0)}{∂x_0 }\cdot\frac{∂x_0}{∂w_{j0}}
∂wj0∂σ(x0)=∂x0∂σ(x0)⋅∂wj0∂x0,其中
∂
σ
(
x
0
)
∂
x
0
=
σ
(
x
0
)
(
1
−
σ
(
x
0
)
)
\frac{∂σ(x_0)}{∂x_0 }=σ(x_0)(1-σ(x_0))
∂x0∂σ(x0)=σ(x0)(1−σ(x0)),这个在前面的激活函数的梯度部分讲解过了:
∂ E ∂ w j 0 = ( O 0 1 − t ) σ ( x 0 ) ( 1 − σ ( x 0 ) ) ∂ x 0 1 ∂ w j 0 \frac{∂E}{∂w_{j0}}=(O_0^1-t)σ(x_0)(1-σ(x_0))\frac{∂x_0^1}{∂w_{j0}} ∂wj0∂E=(O01−t)σ(x0)(1−σ(x0))∂wj0∂x01 -
O
0
=
σ
(
x
0
)
O_0=σ(x_0)
O0=σ(x0):
∂ E ∂ w j 0 = ( O 0 1 − t ) O 0 ( 1 − O 0 ) ∂ x 0 1 ∂ w j 0 \frac{∂E}{∂w_{j0}}=(O_0^1-t)O_0 (1-O_0)\frac{∂x_0^1}{∂w_{j0}} ∂wj0∂E=(O01−t)O0(1−O0)∂wj0∂x01 - 因为
x
0
1
=
x
0
0
w
00
1
+
x
1
0
w
10
1
+
x
2
0
w
20
1
+
⋯
+
x
j
0
w
j
0
1
+
⋯
+
x
n
0
w
n
0
1
x_0^1=x_0^0 w_{00}^1+x_1^0 w_{10}^1+x_2^0 w_{20}^1+⋯+x_j^0 w_{j0}^1+⋯+x_n^0 w_{n0}^1
x01=x00w001+x10w101+x20w201+⋯+xj0wj01+⋯+xn0wn01,所以:
∂ E ∂ w j 0 = ( O 0 1 − t ) O 0 ( 1 − O 0 ) ∂ x 0 1 ∂ w j 0 = ( O 0 1 − t ) O 0 ( 1 − O 0 ) x j 0 \frac{∂E}{∂w_{j0}}=(O_0^1-t)O_0 (1-O_0)\frac{∂x_0^1}{∂w_{j0}} =(O_0^1-t)O_0 (1-O_0)x_j^0 ∂wj0∂E=(O01−t)O0(1−O0)∂wj0∂x01=(O01−t)O0(1−O0)xj0
综上所述,单输出感知机梯度为:
∂
E
∂
w
j
0
=
(
O
0
1
−
t
)
O
0
(
1
−
O
0
)
x
j
0
\frac{∂E}{∂w_{j0}}=(O_0^1-t)O_0 (1-O_0)x_j^0
∂wj0∂E=(O01−t)O0(1−O0)xj0
3. 代码
(1) x=tf.random.normal([1, 3])
: 创建一个1个样本3个维度的Tensor;
(2)w=tf.ones([3, 1])
: 权重
w
w
w,将输出维度变为[1];
(3) 上述过程为求单输出感知机梯度。
参考文献:
[1] 龙良曲:《深度学习与TensorFlow2入门实战》