神经网络ANN(一)

来源:互联网 发布:网络高清摄像机哪家好 编辑:程序博客网 时间:2024/05/16 15:08

神经网络 ANN
新年啦!先给自己一个小小的改变,比如写一篇博客。
再给自己一个小目标,比如3天内徒手写个ANN~~
所以,以下内容是在3天的时间内学到的,未免有不足之处,望指教。


0.ANN缘由

ANN不是一下子就可以被发明出来的,期间经过了几代人的努力才慢慢成型(参考【1】)从单个神经元讲起。一个神经元其实很笨,它可以有多个输入,但只有一种输出,模型如下:

单个神经元模型

上图中,a1,a2,a3是输入,Z是输出,中间w1,w2,w3是可调参数(权值)
它们之间的关系是写定的:Z=g(a1*w1+a2*w2+a3*w3)
这里,Z=g(x),g(x)一般为sigmoid函数

激活函数activation function,sigmoid函数 y=11+ex 是较广泛使用的一种,也有其他高效的激活函数,比如Relu函数y={x,0,x>0x0

这些参数中,a1,a2,a3不可变,w1,w2,w3可变,通过调整w1,w2,w3使得到的Z符合预期

1.ANN原理

ANN由输入层,隐含层,输出层组成,每层都可有多个节点(神经元)
输入层: 最简单的ANN的输入是一维的,可以用一维数组存储,也可以把高维输入(比如图像)转化为一维
隐含层: 内含大量可调参数,是ANN的核心,训练就是不断地调这些参数
输出层:输出结果,是一些数。需要我们定义输出的数的含义,比如做选择题,输入题目,输出1 0 0 0表示选择A,输出0 1 0 0表示选择B,0 0 1 0选择C,0 0 0 1选择D。
工作原理:根据ANN的目的,我们需要训练ANN,使对任意的输入x,都可以得到正确的y(=f(x)),训练的过程,就是ANN内部参数的自适应过程,即这些参数根据训练集所给的正确答案,按一定的规则调整自己,最终成为一个确定的值,此时训练完毕,虽然ANN内部的参数大小是不变的,但对ANN整体来说,任意给定一个输入,它都能得到一个相对正确的输出(y=ANN(x))。

整个网络有2个主要动作,前向传播反向传播

前向传播:从隐含层第一层的第一个节点开始,依次计算每个节点的输出,计算涉及前一层的输入和输入对应的权值,有时候还要加上一个偏置节点输入以保证输出!=0,直到输出层

反向传播:根据梯度下降法反向再次调整权值,隐含层最后一层各节点到输出层各节点的权重调整 依靠本次输出和目标输出的误差(error),按一定的梯度减少误差,进而慢慢使结果逼近目标输出

Java代码实现看下一篇(没用到什么特殊的库,主要是Java的OOP好,容易描述)


参考资料:
【1】神经网络浅讲:从神经元到深度学习
http://blog.jobbole.com/109748/

【2】知乎:深度学习如何入门?Deeper的回答
https://www.zhihu.com/question/26006703

0 0
原创粉丝点击