人工智能三大学派
行为主义:
主要基于控制论,构建感知-动作控制系统,如倒立摆控制等等,平衡车之类的,主要用于模仿行为。
符号主义:
主要基于逻辑表达式,用if-else或者case之类的去求解问题,逻辑与或非等。如专家系统等等,主要用于模仿理性思维。
连接主义:
主要基于仿生学,模仿神经元连接。如神经网络等等,主要用于模仿自觉和感性思维。
但是这篇的话,主要介绍偏向于连接主义。
单输入神经元
多输入神经网络
神经网络计算模型最早就是MP模型了:
当我们将阈值b看做权重w5,将1看做x5时,用数学公式可以简单描述为:
n = ∑ x = 1 5 w i x i n=\sum_{x=1}^{5}w_ix_i n=∑x=15wixi
a = f ( n ) a=f(n) a=f(n)
又或者直接描述为
n = ∑ x = 1 4 w i x i + b n=\sum_{x=1}^{4}w_ix_i +b n=∑x=14wixi+b
a = f ( n ) a=f(n) a=f(n)
可以看到,原始数据为
X
=
[
x
1
,
x
2
,
x
3
,
x
4
]
X=[x_1,x_2,x_3,x_4]
X=[x1,x2,x3,x4],输入神经网络的话,得转变为齐次坐标
X
=
[
x
1
,
x
2
,
x
3
,
x
4
,
1
]
X=[x_1,x_2,x_3,x_4,1]
X=[x1,x2,x3,x4,1]。
最后一个维度呢,主要是用来在特定方向平移原始X用的,后面感知机那里会举个例子。
传递函数
神经元的传输函数有很多种,常用的用三种:
硬极限传输函数hardlim
线性传输函数purelin
对数-S型传输函数sigmoid
其他传输函数
单层神经网络
N = W P + b N=WP+b N=WP+b,其中权重矩阵W如下:
w 1 , 2 w_{1,2} w1,2代表该w属于第 1 个神经元 并且与第2个输入 p2 相连:
A = F ( N ) A=F(N) A=F(N)
图中,W是一个SxR的矩阵,b和n都是一个Sx1的向量,f为传输函数,a为一个Sx1的输出向量。
多层神经网络
通常我们使用sigmoid作为传输函数时,神经网络原则上一般不超过三层,也就是典型的BP网络。超过三层就会容易产生梯度消失问题。
w 1 , 2 3 w_{1,2}^3 w1,23代表该w属于第3层,且输出为第 1 个神经元 并且与第2个输入 p2 相连:
感知机
感知机主要用来处理二分类问题,常采用对称硬极限传输函数hardlims:
对于单个神经元来说,W和P是一个维数相等的向量,感知机的分界线为:
W P + b = 0 WP + b =0 WP+b=0。
移项得 W P = − b WP= -b WP=−b ,即代表P在W向量上的投影长度等于 − b ∣ W ∣ \frac{-b}{|W|} ∣W∣−b例如当W=[-1,1],b= -1 时,判定边界为 ∣ P ∣ c o s ( a l p h a ) = − − 1 ( − 1 ) 2 + 1 2 |P|cos( alpha ) = -\frac{-1}{\sqrt{(-1)^2 + 1^2 }} ∣P∣cos(alpha)=−(−1)2+12 −1:
通过上面例子,我们可以了解到,阈值b的作用,主要就是用来平移感知机边界的,平移就是沿着权重向量w的方向进行的。
递归网络
递归网络主要用来做与时间序列有关的分析。该网络是一个带有反馈的网络,即部分输出会连接到输入,常见的有RNN之类的。
递归网络的构建子模块:延时模块和积分器模块:
竞争网络
Hamming竞争网络
Hamming网络是专门为了求解二值模式识别问题而设计的竞争网络(输入必须是-1或者1),含有一个前馈层和一个递归层,用于判别输入向量P更接近哪个标准向量 w i w_i wi:
前馈层:
由于输入向量元素都由-1和1组成,所以为了对任意输入P都有 W P + b > = 0 WP+b>=0 WP+b>=0,所以b中的元素值都为R,即当P的所有元素都为-1, w 1 w_1 w1的元素都为1时,仍有WP+b >=0:
即b中的所有元素都为R。
递归层:
对于递归层的解释,有三种方法:
1、将其看做对向量的不断分解 与 合成过程:
2、将其看做对向量元素的不断耦合计算过程:
3、设离散动力系统方程为 X k + 1 = A ∗ X k X_{k+1}=A*X_k Xk+1=A∗Xk 求动力系统轨迹:
我们很容易能看到,原点为鞍点,由于poslin**函数(现在一般深度学习叫ReLU函数)会将小于0的部分去掉:
所以过了一层**函数以后,系统的运动轨迹即为:
我个人更喜欢采用第三种方式去解释神经网络行为,因为只要你线性代数好点,这种方式非常直观形象,我们能够知道,如果 x 1 > x 2 x_1>x_2 x1>x2,那么动态系统收敛的结果必然是 x 2 = 0 x_2=0 x2=0,也就是说该递归网络能够通过递归计算,将除了最大值所在的维度以外的其他维度的值都变成0。
Hopfield竞争网络
Hopfield网络是一种递归网络,但完成Hamming网络两层所完成的工作。
例如,W权重矩阵与偏置矩阵b如下:
和Hamming网络只有一个非0值输出不同,Hopfield网络是直接收敛到某个模式上。
卷积神经网络
之前介绍的神经网络,基本上都是全连接神经网络,与全连接不同,卷积网络的卷积层是局部连接的。常见的如CNN网络结构如下:
卷积层
假设不进行零填充( zero -padding )操作,那么输出的特征图尺寸就会比输入样本尺寸小。通常我们为了保持卷积后的特征图和原图大小一致,卷积时会采用padding操作。
卷积操作
这个卷积操作使用的卷积核,在传统图像处理中,我们管它叫滤波核(滤波器),所谓的卷积在传统图像处理中叫滤波,但是传统图像处理是人为的设计滤波器,而CNN呢它是可以自己训练出一个合适的滤波器。
卷积计算为:
5x4+3x(-1)+1x(-1)+2x(-1)+5x3+2x(-1)+1x(-1)+2x(-1)+6x3=42
即对应位置相乘,然后将结果再全部加起来。
传输函数
卷积结果不能直接作为特征图,需通过**函数计算后,把函数愉剧结果作为特征图,常见的**函数包括sigmoid,tanh,ReLU 等函数,深度学习中为了避免梯度消失,常采用ReLU这种线性的函数
padding操作
池化层
池化层的作用是减小卷积层产生的特征图的尺寸选取个区域,根据该区域的特征图得到新的特征图,这个过程就称为池化操作。也可以理解为降采样过程。
池化类型
如采用大小为2x2的池化核对下列特征图进行池化,可以采用不同的池化方式,如果目标对象是纹理,轮廓,则选用max-pooling比较好,如果目标对象是偏向于背景或者其他信息时,采用mean-pooling比较好。
池化操作
以最大池化举例,采用池化核大小为2x2,池化:
卷积和池化的联系
如果你比较熟悉信号处理的话,很容易就知道卷积层与连续小波变换提取低(高)频信号有着异曲同工的妙处,而池化层与离散小波变换提取低(高)频信号有着异曲同工的妙处。
卷积层 ----------> 连续小波变换(CWT)
池化层 ----------> 离散小波变换(DWT)
全连接层
和之前的全连接网络相同,其实就是传统BP网络,在次用于模式判别。
输出层
如果是回归问题,我们原封不动输出,或者采用线性函数计算一下输出就好了:
y p = ∑ m = 1 M w p m x m y^p=\sum_{m=1}^Mw_{pm}x_m yp=∑m=1Mwpmxm
如果是分类问题,我们用softmax函数计算各类的似然概率就好了,然后将概率最大的类作为分类结果即可:
y k = e x p ( a k ) ∑ e x p ( a i ) y^k=\frac{exp(a_k)}{ \sum exp(a_i) } yk=∑exp(ai)exp(ak)
实际使用softmax函数时,如果由于网络输出有较大的数,比如500,经过指数运算很容易产生溢出,可以做如下处理:
取C为输出中的最大值,然后计算
y k = e x p ( a k − C ) ∑ e x p ( a i − C ) y^k=\frac{exp(a_k-C)}{ \sum exp(a_i-C) } yk=∑exp(ai−C)exp(ak−C)