这几天在各大媒体上接触到了人工智能机器学习,觉得很有意思,于是开始入门最简单的机器算法——神经网络训练算法(Neural Network Training);以前一直觉得机器学习很高深,到处是超高等数学、线性代数、数理统计。入坑发现确实是这样!但是呢由项目实例驱动的学习比起为考试不挂科为目的的学习更为高效、实用!在遗传算法、神经网络算法的学习入门之后觉得数学只要用心看没问题的(即使是蒙特卡洛和马尔科夫问题),但是呢需要把数学统计应用到程序中,来解决实际的问题这是两码事。主要呢还是需要动手打代码。下面呢是今天的机器学习之神经网络学习入门记录篇,希望帮助到同样入门采坑的哥们,一起进步!
一、主题闲扯
神经网络学习-顾名思义,就是类似我们人类的学习方式,通过模拟神经元的活动,在神经系统中进行信息处理、存储记忆和反馈的生物机理功能。其实这样是机器学习算法的共性吧,所有的智能算法都是善于发现生活中的常见情节推广到计算仿真的范畴,例如:遗传算法、烟花算法、蚁群算法、模拟退火算法等等。
神经网络学习是人工智能领域的基本算法之一,它是在1943年被心理学家McCulloch和数学家Pitts合作提出的数学模型。并在之后不断完善发展到今天的。它的主要应用领域涉及到模式识别、智能机器人、非线性系统识别、知识处理等。
二、算法理论
2.1、人工神经元模型
这里我们先解释一下机器学习的一些特性,总体来说呢,机器学习的核心就是学习。这个学习过程呢就是通过已知来训练机器。比如:我们通过大量的青蛙图像数据样本来进行输入训练算法,使得我们给这个程序算法一张新的青蛙图像,它能利用训练数据的学习来判断我们新给它的图像数据是青蛙。所以呢,机器学习算法来说就是通过输入变量到算法,算法通过分析反馈进行判断,最后做出结果。
在上图中是简化的神经元模型,我们的Xi是一系列的输入变量,对应在其箭头方向上的是一个权重系数。权重系数呢是为了消除样本数据的偏差,通常是一个rand函数在0-1之间的取值。通过输入变量Xi和其自己的权重系数Wi的乘积的求和输入到神经元上。此时神经元得到了输入变量和其权重的乘积累加和。通过**映射函数F(x)**来进行映射得到结果。以上就是一个简单的神经元模型和信息传递过程。
也可以简化成下面的数学推导公式:我们可以把输入变量和对应权重变换成矩阵相乘,这在Matlab中的运算时是十分有利的。
对于以上的输入变量和对应权重值我们很容易处理,但是这个模型的核心是基于激活函数F(x)的,下面是我们常见的一些激活函数:
2.2、神经网络模型
我们的神经网络是由若干的神经元连接而成的,我们常见的模型分类为:
1、连接方式:前向神经网络和递归神经网络*(反馈神经网络)
2、训练方式:监督式学习和非监督式学习
3、按照实现功能:拟合(回归)神经网络 vs. 分类神经网络
2.3、BP(反向传递)神经网络概述:
概述、
1、Backpropagation is a common method of teaching artificial neural networks how to
perform a given task.
2、It is a supervised learning method, and is a generalization of the delta rule. It
requires a teacher that knows, or can calculate, the desired output for any input in
the training set.
3、 Backpropagation requires that the activation function used by the artificial neurons
(or “nodes”) be differentiable
算法学习过程
Phase 1:神经传递
- 通过神经网络进行训练模式输入的向前传播以产生传播的输出激活。
- 训练模式中通过神经网络对传播的输出激活进行反向传播,目标是生成所有输出和隐藏神经元的增量以便进行反馈调整。
Phase 2: 权值更新 - 用它的输出增量和输入激活变量来得到权重的梯度。
- 通过从权重中减去它的比例来使权重朝着相反的梯度方向移动(最小梯度法)。
算法递进过程图解:(Source:)
该项目描述了利用反向传播算法实现多层神经网络的教学