神经元
h
W
,
b
(
x
)
=
f
(
W
T
x
)
=
f
(
∑
i
=
1
3
w
i
x
i
+
b
)
h_{W, b}(x) = f(W^Tx) = f(\sum^{3}_{i=1}w_ix_i+b)
hW,b(x)=f(WTx)=f(i=1∑3wixi+b)
- W W W 表示权重, 是一个向量
- w w w 表示 W W W中的元素
- x x x 表示特征
- f ( ) f() f() 表示激活函数
- b b b 是偏置, (如果没有 b b b, 那么分类线或者分类面都必须经过原点), b b b 可以看作 W W W 中的 w 0 w_0 w0, 与图中的 +1 相乘
二分类
把激活函数应用到神经元上, 就可以得到一个二分类逻辑斯蒂回归模型
如果激活函数是 sigmoid, 即
f
(
x
)
=
1
1
+
e
−
x
f(x) = \frac{1}{1+e^{-x}}
f(x)=1+e−x1, 则
h
W
(
x
)
=
f
(
W
T
x
)
=
1
1
+
e
−
W
T
x
h_{W}(x) = f(W^Tx) = \frac {1} {1+e^{-W^Tx}}
hW(x)=f(WTx)=1+e−WTx1
P
(
Y
=
0
∣
x
)
=
h
W
(
x
)
=
1
1
+
e
−
W
T
x
P
(
Y
=
1
∣
x
)
=
1
−
h
W
(
x
)
=
e
−
W
T
x
1
+
e
−
W
T
x
P(Y=0|x) = h_{W}(x) = \frac {1} {1+e^{-W^Tx}} \\ P(Y=1|x) = 1 - h_{W}(x) = \frac {e^{-W^Tx}} {1+e^{-W^Tx}} \\
P(Y=0∣x)=hW(x)=1+e−WTx1P(Y=1∣x)=1−hW(x)=1+e−WTxe−WTx
这两个式子可以看做是
1
1
1 和
e
−
W
T
x
e^{-W^Tx}
e−WTx 做归一化,
那么多分类就是
1
1
1,
e
−
W
1
T
x
e^{-W^T_1x}
e−W1Tx,
e
−
W
2
T
x
e^{-W^T_2x}
e−W2Tx …
e
−
W
k
T
x
e^{-W^T_kx}
e−WkTx 做归一化
多分类
再加一个神经元, 就可以做三分类(两个神经元各一类, 1减去两类为第三类)
也就是把
W
W
W 从向量扩展为矩阵,
W
n
W_n
Wn表示矩阵中的第
n
n
n个向量,
输出
W
∗
x
W*x
W∗x 则变为向量
如果分为 K K K 类
P ( Y = k ∣ x ) = e − W k T x 1 + ∑ 1 k − 1 e − W k T x k = 1 , 2 , . . . K − 1 P ( Y = k ∣ x ) = 1 1 + ∑ 1 k − 1 e − W k T x k = K P(Y=k|x) = \frac{e^{-W^T_kx}}{1+\sum^{k-1}_{1}e^{-W^T_k x}} \quad k=1,2,...K-1\\ P(Y=k|x) = \frac{1}{1+\sum^{k-1}_{1}e^{-W^T_k x}} \quad k=K P(Y=k∣x)=1+∑1k−1e−WkTxe−WkTxk=1,2,...K−1P(Y=k∣x)=1+∑1k−1e−WkTx1k=K
举例:
X
=
[
3
,
1
,
2
]
X = [3, 1, 2]
X=[3,1,2]
W
=
[
[
0.4
,
0.6
,
0.5
]
,
[
0.3
,
0.2
,
0.1
]
]
W = [[0.4, 0.6, 0.5], [0.3, 0.2, 0.1]]
W=[[0.4,0.6,0.5],[0.3,0.2,0.1]]
W
∗
X
W*X
W∗X 得
Y
=
[
y
0
,
y
1
]
=
[
2.8
,
1.3
]
Y = [y_0, y_1] = [2.8,1.3]
Y=[y0,y1]=[2.8,1.3]
e
−
Y
=
[
e
−
2.8
,
e
−
1.3
]
=
[
0.006
,
0.27
]
e^{-Y} = [e^{-2.8}, e^{-1.3}] =[0.006, 0.27]
e−Y=[e−2.8,e−1.3]=[0.006,0.27]
S
u
m
=
1
+
0.06
+
0.27
=
1.33
Sum = 1+ 0.06+0.27 = 1.33
Sum=1+0.06+0.27=1.33
则
P
(
Y
=
0
∣
x
)
=
0.06
/
1.33
=
0.045
P(Y=0|x) =0.06/1.33 = 0.045
P(Y=0∣x)=0.06/1.33=0.045
P
(
Y
=
1
∣
x
)
=
0.27
/
1.33
=
0.203
P(Y=1|x) =0.27/1.33 = 0.203
P(Y=1∣x)=0.27/1.33=0.203
P
(
Y
=
2
∣
x
)
=
1.00
/
1.33
=
0.752
P(Y=2|x) =1.00/1.33 = 0.752
P(Y=2∣x)=1.00/1.33=0.752
目标函数
平方差损失
1 n ∑ x , y 1 2 ( y − M o d e l ( x ) ) 2 \frac{1}{n}\sum _{x,y}\frac{1}{2}(y-Model(x))^2 n1x,y∑21(y−Model(x))2
- 1 2 \frac{1}{2} 21 是为了求导方便
- y y y 需要做 one hot 编码
交叉熵损失
1 n ∑ x , y y l n ( M o d e l ( x ) ) \frac{1}{n}\sum_{x, y} yln(Model(x)) n1x,y∑yln(Model(x))
梯度下降
x t + 1 = x t − α ▽ f ( x t ) x_{t+1} = x_t - \alpha \triangledown f(x_t) xt+1=xt−α▽f(xt)
- ▽ f ( x ) \triangledown f(x) ▽f(x) 对 x x x 求偏导
- α \alpha α 学习率
动量梯度下降
v t + 1 = ρ v t + ▽ f ( x t ) x t + 1 = x t − α v t + 1 v_{t+1} = \rho v_t + \triangledown f(x_t)\\ x_{t+1} = x_t - \alpha v_{t+1} vt+1=ρvt+▽f(xt)xt+1=xt−αvt+1
- v t v_t vt 为之前梯度的积累值
- v t + 1 v_{t+1} vt+1 为之前梯度的积累值加上当前梯度的新的积累值
- 由于梯度是矢量, 所以他们的加法包括大小和方向
- 训练开始时, 动量积累得快, 可以加速训练
- 在局部极值附加震荡时, 可以借助动量跳出来
- 如果梯度方向发生变化, 动量能够缓解震荡