神经网络——基础思想

神经网络

神经网络是一种通过模拟人脑的神经网络,来实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多。


用一个例子来学习神经网络:用神经网络识别手写数字。
本文中不同网络层的功能为假想例子,实际神经网络工作时并不会按照这样分割,而是以黑盒的方式进行。这样假设只是帮助理解。

首先要知道,计算机中的图像是由一个数字矩阵存储的,每一个像素点都由n个数字组成(n为通道数,如RGB则为三个通道),这个例子中的图片为28x28的单通道灰度图像,每个像素点的数字为“激活值”,其大小表示像素点颜色的深浅,数字越小颜色越“黑”,数字越大颜色越“白”)

我们先将这784个像素点的值逐行作为这个神经网络的第一层的值,这样输入问题解决了,那么怎样通过神经网络来识别手写数字呢?
神经网络——基础思想_第1张图片
神经网络——基础思想_第2张图片

如上图可知,手写数字可以拆分为不同的图形,如“9“可以拆分为一个圈加一个竖;”8“可以拆分为上下两个圈,”4“可以拆分为三个图形等。而各种图形又可以由更精细的”方向各异的点“来表示。


第二层的神经元用来识别图像中是否有相应的”方向各异的点“,第三层的神经元用来识别图像中是否有对应的圈、竖、横等图形,之后第三层到第四层的神经网络就可以学习怎样组合各种图形才能够点亮具体数字的神经元的任务。
最后一层处理时,这十个节点经求和而得到的值都为0-1的一个小数,表示为该输入为相应数字的可能性。


那么,第二层与第三层两个隐藏层是怎么识别”方向各异的点“与”各种图形“的呢?
神经网络——基础思想_第3张图片
第一层神经元中存放的值为初始值,用a表示。
输入层与第二层的连线称作权重,也叫做参数,用w表示。

将第一层中每个神经元的值与相应的参数相乘并将其求和(w1a1+w2a1+…+wn*An),作为第二层神经元的输入。

当第二层神经元想要识别出一个横向的点时,只需要将横向点覆盖区域的像素点值的参数w赋为正值(绿色区域),将其边缘所对应的像素点的参数w赋为负值(红色区域)。这样以来,若所识别的图像中有相似”横向的点“时,第二层神经元的输入值达到最大;若所识别的图像中没有相似”横向的点“或相应区域有图像但并非”横向的点“时,“横向点”边缘的负权值会严重”拖累“所有第一层神经元值与权重相乘并求和得到的值,导致并不能触发相应的激活函数(下文讲解)。


神经网络——基础思想_第4张图片
我们需要让神经元的输出值处于0-1区间内,这里就用到了激活函数,来将无限制的输入值映射成0-1区间的输出值。

激活函数有很多,如Sgn函数,sigmoid函数,ReLU函数等。如今常用ReLU函数,上图中的函数为sigmoid函数。
神经网络——基础思想_第5张图片
若我们想让输入值>10的神经元才能够被激活,那么就需要在求和参数与上一层神经元值的积之后,再加入一个偏置值(bias),最后再用sigmoid函数进行映射。



按照上述过程,求解这个神经网络需要计算12960 + 42 = 13002个权重加偏置,相当于有13002个可以调节的元素。
所以我们所说的机器学习,指的是如何找到正确的权重和偏置值。


神经网络——基础思想_第6张图片

另外,使用线性代数的语言可以简便表达神经网络的运算过程:g(w*a + b) = z

你可能感兴趣的:(机器学习,机器学习,深度学习,神经网络)