1. 前馈神经网(Multilayer Feedforward Network)
前馈神经网大致就是这个样子,一层一层的结构。这样,我们就由第一代的神经元系统繁殖出来了一个神经元群落...看起来很高深的样子。
先说一些参数和记号:
- L:网络的层次
- nl
- 是网络输出的个数。
- wljk , 1≤j≤nl , 1≤k≤nl−1 :相邻两层( l 到 l−1
- )之间的连接的权重。
- blj :第 l 层第 j
- 个神经元的偏置值。
- slj , 1≤j≤nl , 1≤l≤L :第 l 层第 j
- 个神经元的状态值。
-
alj
,
1≤j≤nl
,
1≤l≤L
:第
l
层第
j
- 个神经元的活性(activation),或称为输出。
基本关系:
- alj=σ(slj)
-
sl+1j=∑nlk=1(wk+1jkalk)+bl+1j=∑nlk=1(wk+1jkσ(slj))+bl+1j
,
1≤j≤nl+1
,
1≤l≤L
模型: {f(x;w,b)}
为 Rn0→RnL的映射。
2. BP算法(网络学习/拟合)
给定数据 D={(xi,yi),1≤i≤N}
,定义
J(w,b;x(i),y(i))=12[y(i)−f(x(i);w,b)]2
那么
J(w,b)=1N∑Ni=1J(w,b;x(i),y(i))empiricalerror+∑Ll=1∑nlj=1∑nl−1k=1(wljk)2λ2regularization
接下来的拟合优化问题就是最小化 J(w,b)
。这里可以采用梯度下降:
wt+1←wt−α∂J∂w|t
, bt+1←bt−α∂J∂b|t,所以需要求得这两个梯度(偏导)项。
定义 δlj=∂J(w,b;x,y)∂slj
,这样 ∂J(w,b;x,y)∂wljk=∂J(w,b;x,y)∂slj∂slj∂wljk=δljσ(sl−1k) ,其中 slj=∑nl−1k=1wljkσ(sl−1k)+blj。
类似的, ∂J(w,b;x,y)∂blj=∂J(w,b;x,y)∂slj∂slj∂blj=δlj
为了解 δlj
这个东西,我们需要后向递归。
首先在第L层: ∂∂slj12(y−aLj)2=∂∂slj12(y−σ(sLj))2=(y−aLj)σ′(sLj)
,然后 σ′(sLj)=σ(s)(1−σ(s))For L-1,...,1,我们有 δlj=∂J∂slj=∑nl+1k=1∂J∂sl+1j∂sl+1j∂slj=∑nl+1k=1δl+1kwl+1jkσ(slj)
,这样就一直可以迭代反推至第一层。
3. AE(自编码器,Auto-Encoders)
自编码器可以算是一个简化的神经网,大致只有三层:0,1,2。其中输入是x,输出也是x,但是中间进行了一个过滤。直观的讲,就像一个文件压缩了一下,又解压缩。中间压缩包的体积要比源文件小,但是信息却基本没有损失。
AE基本上想达到两个目标:
1. n1<n0
,即中间那层的维数小于原始输入的维数p。
2. 或者输出的均值非常小,即从第一层到最上面一层的输出较为稀疏,不是很强烈的关联。
下节课会讲到SVM。
神经网络,这是要开始Deep Learning了么?
神经网络的历史和大起大落还是可以八卦一下的...
第一波:人工神经网络起源于上世纪40年代,到今天已经70年历史了。第一个神经元模型是1943年McCulloch和Pitts提出的,称为thresholdlogic,它可以实现一些逻辑运算的功能。自此以后,神经网络的研究分化为两个方向,一个专注于生物信息处理的过程,称为生物神经网络;一个专注于工程应用,称为人工神经网络。
第二波:上世纪80年代神经网络的研究热潮。带反馈的神经网络开始兴起,其中以Stephen Grossberg和John Hopfield的工作最具代表性。很多复杂的认知现象比如联想记忆都可以用反馈神经网络进行模拟和解释。一位在神经网络领域非常资深的学者跟我聊天时说,在那个年代,只要你的文章跟神经网络扯上点关系,无论什么杂志,都很容易发表。
第三波:直到2006年深度网络(deep network)和深度学习(deep learning)概念的提出,神经网络又开始焕发一轮新的生命。深度网络,从字面上理解就是深层次的神经网络。至于为什么不沿用以前的术语“多层神经网络”,个人猜测可能是为了与以前的神经网络相区分,表示这是一个新的概念。这个名词由多伦多大学的GeoffHinton研究组于2006年创造。事实上,Hinton研究组提出的这个深度网络从结构上讲与传统的多层感知机没有什么不同,并且在做有监督学习时算法也是一样的。唯一的不同是这个网络在做有监督学习前要先做非监督学习,然后将非监督学习学到的权值当作有监督学习的初值进行训练。
上述来自:http://www.caai.cn/contents/118/1934.html
有没有感觉最近deep learning热得一塌糊涂?好像是个人都知道有这么个词儿但是真正知道他干什么的、怎么来的的人却不怎么多。嗯,貌似从这节课开始,要掀起deep
learning的篇章咯。顿时感觉好洋气哇。
----------正文的分割线-----------
这节课先介绍七十多年前的Perceptron模型。
1. 神经元
大致就是这样一张图片。神经元细胞有个大大的细胞核,然后有个轴突。如果神经元细胞拼在一起,可以构成一个神经网络。
(我觉得这个细胞模型和后面的东西其实没太直接的联系...就是一个很好看的图...)
2. Perceptron模型
Perceptron模型有若干输入: x1,...,xn
,标记为 {xn}序列。
每个输入都有一个权重(某种程度上可以理解为信息损失): w1,...,wn
,标记为 {wn}序列。
最后每个“细胞”还有一个偏(门限):b,即我们常说的常数项截距。
最终的状态: s=∑Ni=1xiwi−b
输出: y=σ(s)
,比较简单的情况下, σ(⋅) 可以是一个二元输出函数,比如 σ(s)={10s>0s<0 或者写作 σ(s)=I(s>0)。但是比较讨厌的是这个函数不可微,所以我们可以转成一个可微的函数(有点类似logistic regression的思路,用概率的密度函数来做)。
可微的情况下,这个输出就是: y=11+e−s
,这样就可以做成一个光滑的曲线了。
3. Perceptron算法
给定一批数据 D={(xi,yi),1≤i≤N}
, 我们希望求得 w∗ 使得 w⋅xi>0 ,如果 yi=1 ;否则, w⋅xi<0 (即 w∗(yixi)>0。
算法:先是我们可以不断重复的无限复制数据: (x1y1),...,(xn,yn),(x1y1),...,(xn,yn),(x1y1),...,(xn,yn)...
然后初始化: k=0
, w(k)=0。
开始循环:
For k=1,2,...
IF w(k)⋅(y(k)x(k))<0
,then w(k+1)=w(k)+y(k)x(k)定理 如果存在w使得 w∗(yixi)>0,∀i
成立(即平面线性可分),则Perceptron算法在有限步收敛。
证明:
- w(k)=∑K−1k=1y(k)x(k)
- 。
- 存在
w∗
使得
w∗(yixi)>0,∀i
,那么我们有
δ=minw∗(yixi)>0
,
∥w∗w(k)∥2≤∥w∗∥2∥w(k)∥2
,同时我们有
∥w∗w(k)∥2=∥w∗∑y(k)x(k)∥2=∥∑w∗y(k)x(k)∥2≥K2δ2
这样就会有
KC≥∥w(k)∥2≥1∥w∗∥2K2δ2
- ,当k趋近无穷大的时候,显然左式不成立。所以必有在某个k的时候停止迭代。
4. 推广至多类——Collins算法(2002)
(1) Collins表述
给定 D={(xi,yi),1≤i≤N},Φ(x,y)∈R
,求w使得 y∗i=argmaxy≠yiw⋅Φ(xi,y),∀i ,除了 yi 外最大。这样 w⋅Φ(xi,yi)>w⋅Φ(xi,y),y≠yi 。 y∗=argmaxyΦ(x,y)。
(2)算法: ΔΦ(xi,y∗i)=Φ(xi,yi)−Φ(xi,y∗i)
,
y∗i=argminy≠yiw⋅Φ(xi,y)
。
初始化: k=0
, w(k)=0.
For k=1,2,...
计算 ΔΦ(xi,y∗i(k))<0
, w(k+1)=w(k)+ΔΦ(x(k),y∗(k))输出: w∗=1K∑K1w(k)
(3)定理。若为线性平面可分,则在有限步内收敛。