人工神经网络是如何运作的

本文主要介绍人工神经网络是如何运作的,这个交叉连接的网络如何进行学习的。

吐槽一下网上的各种关于人工神经网络的讲解,要么就是长篇大论,要么就是公式漫天飞,代码到处是,非常不好理解,本文尽量避免这些,用一个网页搜索的例子来理解人工神经网络。

1.神经网络模型

上图中有三个层级:输入层(用来感知,暂且类比为手,脚等器官)、隐藏层(用来分析,类比隐藏在脑子里的神经)、输出层(输出结果,类比人体响应动作)。除了这三个层级之外,还有许多连线,这些连线代表这从一个节点到另一个节点的关联程度。

举个例子:你的手(感知节点1)被针刺了一下,信号是需要传入到与手连接的神经元(中间节点1)中,最后再将信号传给控制缩回手的肌肉(输出节点1)中去。完成这个动作,并不需要中间节点2、3的配合,也没必要给予输出节点2、3反应,所以在这个动作中,感知节点1到中间节点1的连线就需要大权重,中间2、3节点就不需要怎么大的权重了,输出节点同理。

看到这你可能有疑问,在一个计算机中,如何将实际问题与这个模型关联起来呢?下面将带来一个网页搜索的例子来详细讲解人工神经网络如何应用以及其原理。

2.前馈法——初步建立网络的基本结构

举个例子:你需要搜索electronic science这两个关键词,搜索引擎如何在庞大的网页中返回结果呢?

将electronic和science这两个关键词传入输入层的两个感知节点赋值为1,其他节点都赋值为0,第一层次的连线权重赋值为-0.2(如果赋0将一直陷入0中无法跳出),第二层的连线权重赋值为0,这就建立了该搜索模型的基本结构,现在开始利用前馈法,初步确定各项参数。

1.确定h1节点的活跃度值,计算方法:先sum=1*(-0.2)+1*(-0.2)+0*(-0.2),再h1=tanh(sum),h1的值就是该点活跃度值,其他节点同理。(计算示意图见下图)

拓展一下tanh函数(反双曲正切函数):sum=0时,函数斜率大易变化,sum=1时,函数斜率小基本不变化,所以当活跃度接近1或-1的时候,再怎么训练网络,活跃度的值变化比较小。用这个函数可以有效的激活节点。

2.输出层的节点也同样确定,利用刚才计算的隐藏层节点,再次使用上述方法确定。sum=h1*0+h2*0+h3*0

有一个问题出现了:这次的连接线权值都为0,sum不管怎么计算都是0,url1=tanh(sum)=0,输出节点全部都是0,这时训练集的作用就开始出现了,接下来将利用训练集使用反向传播法进行训练模型。

3.利用反向传播法进行训练

反向传播法顾名思义,反向进行训练,即输出层-->隐藏层-->输入层

再举个例子:现有一个训练集,其中有100个人搜索electronic science这两个关键词,他们点击网页的所有记录。即有输入层和输出层的数据。

假设训练集中,搜索electronic时,用户点击url2的次数比较多。也就是说,用户在搜索electronic时,期望的目标是url2,利用这个期望来调整连线权值以及节点活跃度。

1.建立一个误差矩阵error,表示当前节点的活跃度与期望目标的差值(计算示意图见下图)

2.使用一个dtanh(x)函数y=1-x^2来判断这个误差矩阵的接受程度。out_error=dtanh(x)*error(dtanh函数见下图)

其中x为输出节点的活跃度,如果x=1,dtanh(x)=0就不接受误差,因为活跃度接近为1的节点误差对其不产生很大影响,而x=0,则该节点的活跃度需要做出改变,误差将需要接受。

3.将输出节点误差out_error与隐藏层节点的活跃度相乘,便得到从该节点到下一节点权重需要改变的值,然后把改变的值与原来的权重相加,就得到了新的权重。

(随着1,2,3步骤的迭代次数越来越多,权重和活跃度也变得越来越稳定)

4.同理可计算出输入层到隐藏层各连线的权重。

隐藏层误差矩阵h_error的计算方法为:输出层的误差矩阵out_error乘各当前隐藏节点到输出层各节点的权值,再与隐藏节点的dtanh值相乘(示意图如下)

隐藏层误差矩阵求出来后,将h_error与输入节点的权值相乘得到改变值change,再与当前连接权值相加就得到第一级的新权值。

4.结论

在此总结一下,建立人工神经网络的步骤:

1.搭建人工神经网络的基本框架(输入层节点,隐藏层节点,输出层节点,以及各层之间连线的权值)

2.前馈法使用tanh函数,计算各节点的活跃度

3.反向传播法使用期望误差的方式,计算各层级之间连接的权值(建议这部分详细看,人工神经网络的关键也在此)

4.利用训练集不断训练,得到确定的节点活跃度以及连接线权值

5.开始使用这个网络

 

PS:文中使用网页搜索的例子可能不恰当,实际网页搜索中可能经常使用的是TF-IDF(词频-逆文本频率指数)和pagerank值来判定网页的排名。

图片都自己亲手画的,不如网上的好看。文中没有代码的具体实现,如果附上代码这篇文章就有点长了。希望本文能给各位有些许帮助。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值