数据挖掘-人工神经网络学习

人工神经网络相比传统的线性回归和逻辑回归,在模拟非线性模型上会有更好的效果,用于分类和回归均可。

一、神经元(感知器)

图片来自吴恩达机器学习入门

一个神经元包括几个输入结点(图中的x_1x_2x_3等)和一个输出结点,每个输入结点连接到输出结点都要有一个权重(θ,很多材料也用w来表示),用来模拟输入结点和输出结点之间的连接强度。训练一个神经元模型,就是持续调整连接强度,直到能拟合模型。

神经元模型里会在输出结点对这几个输入结点进行加权求和(一般会有一个偏置因子x_0,这个原因后面写),然后得到一个结果h_θ(x),用h_θ(x)的值来判断所处的分类。

一般来说,为了拟合非线性模型,除了简单的用加权求和以外,还应该套用一个函数在加权求和上,这个函数叫做激活函数。如果把输入特征和权重都看作向量,那么求和就是两个向量的内积θ_tx,在这个外面再套用一个激活函数,输出结果。

展开来看就是h_θ(x)=g(θ_0x_0+θ_1x_1+θ_2x_2+……)
g(x)就是激活函数。

常见的激活函数种类

以下内容摘自https://zhuanlan.zhihu.com/p/29633019

sigmoid

优点:有较好的解释性

缺点:
1.Sigmoid函数饱和使梯度消失。sigmoid神经元有一个不好的特性,就是当神经元的激活在接近0或1处时会饱和:在这些区域,梯度几乎为0。
2.输出不是零中心的,这一情况将影响梯度下降的运作,因为如果输入神经元的数据总是正数,那么关于w的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数,这样梯度下降权重更新时出现z字型的下降。这样收敛会变得异常的慢。(这也是为什么要一直保持为数据的0中心化)—–但这个问题比较小。
3.exp()在深度神经网络时候相比其他运算就比较慢


Tanh非线性函数

优点:
1.它的输出是零中心的。因此,在实际操作中,tanh非线性函数比sigmoid非线性函数更受欢迎。

缺点:
1.和Sigmoid函数一样,饱和使梯度消失。计算慢.


ReLU

优点:
1.ReLU对于随机梯度下降的收敛有巨大的加速作用( Krizhevsky 等的论文alexnet指出有6倍之多)。据称这是由它的线性,非饱和的公式导致的;
2.注意:现在大部分的DNN用的激活函数就是ReLu

缺点:
1.当x是小于0的时候,那么从此所以流过这个神经元的梯度将都变成0;这个时候这个ReLU单元在训练中将死亡(也就是参数无法更新),这也导致了数据多样化的丢失(因为数据一旦使得梯度为0,也就说明这些数据已不起作用)。


Leaky ReLU

优点:
1.非饱和的公式;
2.Leaky ReLU是为解决“ReLU死亡”问题的尝试

缺点:
1.有些研究者的论文指出这个激活函数表现很不错,但是其效果并不是很稳定

Kaiming He等人在2015年发布的论文Delving Deep into Rectifiers中介绍了一种新方法PReLU,把负区间上的斜率当做每个神经元中的一个参数。然而该激活函数在在不同任务中均有益处的一致性并没有特别清晰。

Maxout

Maxout是对ReLU和leaky ReLU的一般化归纳
优点:
1.拥有ReLU单元的所有优点(线性操作和不饱和),而没有它的缺点(死亡的ReLU单元)

缺点 :
1.每个神经元的参数数量增加了一倍,这就导致整体参数的数量激增。难训练,容易过拟合

二、人工神经网络

一些神经元组合在一起就是神经网络(我是这么理解的),实际上人工神经网络可以分为三层,输入层,输出层和隐藏层。

输入层:最开始的一层,用来输入样本特征值。
输出层:最后一层,用来输出结果,判断分类。
隐藏层:其他的层次都叫隐藏层,可以有多个层级。


以这幅图为例,输入层就是(偏置因子),,,,隐藏层是。输出层则是最终得到的。计算方式如下图(图里可能没有,但是公式里有):

其中把看成矩阵,则下标按照线性代数定义,是行和列的坐标,而上标则代表了从第j层到第j+1层的权重值。(这里面的实际上和是一个意思,因为输入层输入的就是特征值,而代表的是第2层的第1个结点值)

不管是在输入层-隐藏层,还是隐藏层-输出层,只要是结点相连的地方都有一个权重。

每一层的结点仅和下一层的结点相连,叫做前馈神经网络,同一层结点可以相连或某层结点可以连接到前面如何一层的结点的叫做递归神经网络

权重调整原理

通常来说,有监督学习都是试图让误差最小,来衡量参数的变化,这里可以采用MSE来作为代价函数:
E(θ) = \frac{1}{2}{\sum^{N}_{i=1}(y_i-\hat{y}_i})
把2替换为n就是MSE的式子,y代表实际标签值,\hat{y_i}代表根据给定权重算出来的y。

\hat{y_i}是线性函数的时候,该函数表示为一个凸函数,如果有两个变量的话,就是一个三维碗状函数,用梯度下降法可以求解最小值,梯度下降法的求解为:
\theta_j \leftarrow \theta_j - \alpha{\frac{\partial E(θ)}{\partial \theta_j}}
其中\alpha是学习率,式子的意思就是对E(θ)对每一个参数θ_j求偏导数,乘以学习率之后,用θ_j减掉这个值,得到这一次迭代的参数,轮番迭代之后得到局部最小值(凸优化中,局部最小就是全局最小),按照这个方法计算,权值会沿着使总体误差项减小的方向增加。

但是实际上神经网络大部分函数都不是线性的,因此E(θ)也就不是凸函数,这样的话使用梯度下降法就会出现局部最优的问题,从而得不到最优解,并且对于隐藏节点来说,
因此有一种反向传播算法(back-propagation,BP)可以用来调整权重,从而得到最优解。

三、BP神经网络

从名字就可以看出,BP神经网络就是用了反向传播算法得出参数的神经网络,这个算法的每一次迭代包括两个阶段,前向阶段和后向阶段:
前向阶段就是用前一次迭代的权值计算网络中每一个结点的输出值,先计算j层输出,然后用j层计算j+1层。
后向阶段则是从相反的方向更新权重,先更新j+1层,再更新j层。这种方法可以用j+1层的结点误差来估算j层的结点误差。

还是吴恩达老师的图,图中\delta^{(l)}_j代表第l层,j结点的误差,则\delta^{(4)}_j = a^{(4)}_j - y_j
{\delta^{(3)}} = {(\Theta^{(3)})}^T\delta^{(4)}.*g'(z^{(3)})
{\delta^{(2)}} = {(\Theta^{(2)})}^T\delta^{(3)}.*g'(z^{(2)})
……

其中\Theta^{(3)}代表的是第3层到第4层的权重矩阵,\delta^{(4)}代表第四层的误差矩阵,g代表激活函数,z = Θ^Tx,也就是该层的结点值。图中蓝笔代表当激活函数是sigmoid的时候的计算公式。
上述式子的推导过程,看到一个笔记记的非常明白:https://zhuanlan.zhihu.com/p/58068618

反向传播的计算方式如下:

首先明确这个步骤中的代价函数(图中的J(Θ)即为通常来说的E(Θ))。

1.设\Delta^{l}_{ij} = 0,其中l代表层数,i训练集中的第i个样本,j代表第i个样本的第j个特征。
2.计算完前向传播之后,会得到输出层的值,用这个值和标签值比较,得到输出层的误差。
3.用刚才提到的公式,依次求出δ^{(l-1)}、δ^{(l-2)}、……
4.用公式\Delta^{l}_{ij} = \Delta^{l}_{ij} + a^{l}_jδ^{(l+1)}_{ij}累加得到\Delta^{l}_{ij}的值
5.计算梯度函数:

(j=0代表是偏置因子,不用正则化)
6.得到的就是代价函数关于的偏导数。

有了偏导数,根据权重的更新方式可以得到

可以得到迭代的Θ值。

事实上式子中的\delta代表的是权重需要改变的程度大小。反向传播,实际上就是用 上一层节点的误差值 * 权重,得到下一层的误差值。和正向传播是类似的。

在第一次进行计算的时候,对于权重要进行随机初始化,不要设置为都是0,会导致逻辑单元不发生变化。(不存在隐藏层时,可以初始化为0)。最好初始化为一个较小的数,可以考虑采用np.random.randn(1,1)生成正态分布。

梯度检验

为了保证实施反向传播的过程是正确的,需要引入梯度检验。
梯度检验的原理就是在函数上有一点θ,可以取θ-ε和θ+ε这两个点的值,他们两点之间的斜率就接近于这一点的导数(二维的情况,推广到向量的道理是类似的)。

实际计算过程中,用反向传播计算导数,然后用梯度检验验证,如果非常接近(只有几位小数不同)那么证明反向传播的计算是正确的,然后用计算出来的导数进行下一次迭代。

多分类

上面说到的都是二元分类的情况,如果是多分类的情况,可以把输出结果向量化:


如果有k个分类,则分为k个输出结点,对应不同的输出结点用向量不同位置上的1来表示,其他的均为0。
这样的话,保证了每一个输出结点实际上还是二元的,但是可以根据4个输出结点的不同结果组成来判断分类。

简单了解了一下神经网络,看的还是不太明白,先写在这里。有机会再调整。在Python中通常用Keras来实现,但是sklearn中也是有这个类的,只不过因为不支持GPU性能有些问题,小规模数据也可以采用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,104评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,816评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,697评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,836评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,851评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,441评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,992评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,899评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,457评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,529评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,664评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,346评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,025评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,511评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,611评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,081评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,675评论 2 359

推荐阅读更多精彩内容