文章目录
终究有一天,还是得接触这个让人捉摸不透的东西。我总感觉他太过神秘,所以对他没有什么好感。无奈,他如此实用,不得不拜访一下。我不管什么CNN和RNN,这些花里胡哨的东西,我感觉就像边角料。
参考《Pattern Recongition》
源
神经网络,就其类别来讲是非线性判别,而非线性判别,主要是因为激活函数。输入层得到输入,经过线性函数(超平面)的分隔,输入的特征被映射为其他一些特征,如果激活函数是简单的0-1函数(虽然没法反向求导了)。就是那样本映射到超体(是这么形容吗?)的顶点上,再经过一层,网络,对上述点进行分隔,幸许就能把样本成功分类了。当然,这些都是简单的情况,而且,俩层神经网络的能力似乎并不够。
神经网络框架
这是一个三层神经网络。
Backpropagation 反向传播
我不知道有没有别的什么神经网络不用这个算法的,我还没有太深入了解,但我感觉,神经网络最核心的东西就是反向传播,还有框架本身。
下面,过一遍这个梯度的计算。
符号说明
假
定
有
L
层
神
经
元
,
输
入
层
有
k
0
=
l
个
结
点
(
神
经
元
)
,
在
第
r
层
有
k
r
个
结
点
,
r
=
1
,
2
,
…
,
L
.
假定有L层神经元,输入层有k_0=l个结点(神经元),在第r层有k_r个结点,r=1,2,\ldots,L.
假定有L层神经元,输入层有k0=l个结点(神经元),在第r层有kr个结点,r=1,2,…,L.
有
N
个
训
练
样
本
,
(
x
(
i
)
,
y
(
i
)
)
,
i
=
1
,
2
,
…
,
N
有N个训练样本,(x(i),y(i)),i=1,2,\ldots,N
有N个训练样本,(x(i),y(i)),i=1,2,…,N
w
j
r
表
示
第
r
层
第
j
个
结
点
w_j^r表示第r层第j个结点
wjr表示第r层第j个结点
权重更新,按照普通的梯度下降为:
f
(
⋅
)
为
激
活
函
数
f(\cdot)为激活函数
f(⋅)为激活函数
损失函数(这里以最小平方误差为例)
梯度计算 Δ w j r = − μ ∑ i = 1 N δ j r ( i ) y r − 1 ( i ) \Delta w_j^r=-\mu\mathop{\sum}\limits_{i=1}^{N}\delta_j^r(i)y^{r-1}(i) Δwjr=−μi=1∑Nδjr(i)yr−1(i)
首
先
,
y
k
r
−
1
(
i
)
,
是
第
r
−
1
层
第
k
个
结
点
的
输
出
(
激
活
后
)
,
相
应
的
v
k
r
−
1
为
没
有
激
活
的
输
出
。
首先,y_k^{r-1}(i),是第r-1层第k个结点的输出(激活后),相应的v_k^{r-1}为没有激活的输出。
首先,ykr−1(i),是第r−1层第k个结点的输出(激活后),相应的vkr−1为没有激活的输出。
而
w
j
k
r
是
连
接
r
−
1
层
第
k
个
结
点
和
r
层
第
j
个
结
点
的
权
重
。
而w_{jk}^r是连接r-1层第k个结点和r层第j个结点的权重。
而wjkr是连接r−1层第k个结点和r层第j个结点的权重。
简
便
的
写
法
就
是
v
j
r
(
i
)
=
w
j
t
T
y
r
−
1
(
i
)
简便的写法就是v_j^r(i)=w_j^{t\mathrm{T}}y^{r-1}(i)
简便的写法就是vjr(i)=wjtTyr−1(i)
其
中
y
0
r
−
1
(
i
)
≡
+
1
其中y_0^{r-1}(i)\equiv+1
其中y0r−1(i)≡+1
那
么
损
失
函
数
关
于
w
j
r
的
导
数
(
梯
度
)
就
是
:
那么损失函数关于w_j^r的导数(梯度)就是:
那么损失函数关于wjr的导数(梯度)就是:
又
又
又
记
记
记
则
:
则:
则:
计算 δ j r ( i ) \delta_j^r(i) δjr(i)
r = L r=L r=L
所
以
所以
所以
r < L r < L r<L
因
为
v
j
r
−
1
(
i
)
是
第
r
层
所
有
结
点
的
输
入
,
所
以
:
因为v_j^{r-1}(i)是第r层所有结点的输入,所以:
因为vjr−1(i)是第r层所有结点的输入,所以:
也
就
是
也就是
也就是
令
δ
r
=
[
δ
1
r
,
δ
2
r
,
…
,
δ
k
r
r
]
T
,
那
么
令\delta^{r}=[\delta_1^r,\delta_2^r,\ldots,\delta_{k_r}^r]^{\mathrm{T}},那么
令δr=[δ1r,δ2r,…,δkrr]T,那么
δ
r
−
1
=
M
r
δ
r
其
中
M
j
k
r
=
∂
v
k
r
∂
v
j
r
−
1
又
\delta^{r-1}=M^r\delta^r其中M_{jk}^r=\frac{\partial v_k^r}{\partial v_j^{r-1}}又
δr−1=Mrδr其中Mjkr=∂vjr−1∂vkr又
所
以
M
j
k
r
(
i
)
=
w
k
j
r
f
′
(
v
j
r
−
1
(
i
)
)
所以M_{jk}^r(i)=w_{kj}^r f^{'}(v_j^{r-1}(i))
所以Mjkr(i)=wkjrf′(vjr−1(i))
所
以
,
总
的
来
说
所以,总的来说
所以,总的来说
δ
r
=
M
r
+
1
M
r
+
2
…
M
L
δ
L
\delta^r=M^{r+1}M^{r+2}\ldots M^{L}\delta^L
δr=Mr+1Mr+2…MLδL
这
意
味
着
,
对
于
第
r
层
,
我
们
只
要
记
录
w
r
(
o
l
d
)
和
M
r
就
足
够
迭
代
更
新
了
,
而
且
计
算
M
r
的
工
作
可
以
在
前
向
传
递
的
时
候
完
成
,
也
可
以
在
反
向
传
播
的
时
候
再
计
算
。
这意味着,对于第r层,我们只要记录w^r(old)和M^r就足够迭代更新了,而且计算M^r的工作可以在前向传递的时候完成,也可以在反向传播的时候再计算。
这意味着,对于第r层,我们只要记录wr(old)和Mr就足够迭代更新了,而且计算Mr的工作可以在前向传递的时候完成,也可以在反向传播的时候再计算。
我
想
,
这
也
是
P
y
t
o
r
c
h
等
框
架
计
算
梯
度
的
原
理
,
当
然
这
只
是
猜
测
,
因
为
我
还
没
有
实
际
上
去
看
。
我想,这也是Pytorch等框架计算梯度的原理,当然这只是猜测,因为我还没有实际上去看。
我想,这也是Pytorch等框架计算梯度的原理,当然这只是猜测,因为我还没有实际上去看。