当前位置:   article > 正文

机器学习之神经网络(Question和Answer)_question and answer network

question and answer network

摘要:本文只讲神经网络中各自关系。对概念及算法不做详尽介绍。文笔粗浅,多多包涵。
“一入侯门“深”似海,登上“神经”不归路”。

Q:人工智能中神经网络是指什么呢?
A:是一种数学模型或说学习模型。简单的讲,形式是模拟动物的脑神经网络行为特征,进行分布式并行信息处理的算法数学模型。

Q:神经网络中基本的元素是什么呢?
A:既然是模拟动物的脑神经网络,那么神经元便是神经网络的基本元素啦,不过神经元在神经网络中的模型称为“M-P神经元模型”。这个模型包含诸多的参数啦,像诸多输入信号、输入信号的权重、神经元的阈值、激活函数(当然输入神经元没有激活函数,只有输出神经元和隐含层神经元才有激活函数)、输出信号等。

Q:什么是激活函数啊?
A:神经元将接收到的输入信号值和权重叠加起来,再和神经元阈值进行一个比较,但是类比动物神经元啊,只有正负电荷,所以呢,我们希望神经元模型输出值是一个0(抑制)或1(激活)的值,将这个比较值再给激活函数,让激活函数判定输出是该输出0还是该输出1.

Q:激活函数有点溜呀,能详细讲讲吗?
A:呐,前面我们说啦,神经元模型存在0(抑制)和1(激活)两种状态的跳变,所以理想中的激活函数应该是阶跃函数sgn(x),要不清楚这函数长啥样呢?问下度娘哈。出现了个问题,这个sgn呀,长得太棱角分明,不平滑不连续,即长相不友好。所以在数学上不好对它进行处理,比如呀,在训练网络权重的时候,通常要对某个权重求偏导数、求极值,sgn的卖相意味着这函数无法“连续可导”。所以,我们通常用Sigmoid函数,因为她长得光滑细腻连续,来代替阶跃函数,这函数能将比较(诸多输入信号和权重叠加值与神经元阈值的比较)值范围压缩在[0,1]之间了,所以也叫她“挤压函数(Squashing function)”。自然啦,神经元中的激活函数,并不限于我们前面提到的阶跃函数、Sigmod函数,还可以是现在深度学习常用的ReLU(Rectified Linear Unit)和sofmax等。

Q:那怎么去理解这个激活函数呀?
A:比如说,如果你的“野蛮女友”打你耳光,当她打你第一个耳光时,你想了很多,考虑她的脸蛋(权重w1)、身材(权重w2)、学历(权重w3)、性格(权重w4)、你爱她的程度(权重w5)以及娶媳妇的难度(权重w6)等等因素(这些因素,在机器学习领域,就是研究对象的特征,它们组合在一起,就构成了对象的特征空间),综合衡量后,你决定忍了,或者说这一切并没有超出你忍耐的阈值(这期间,你也给自己找了一个优雅的台阶:打是亲、骂是爱啊),如果把你的忍耐“功能”看作一个函数(回顾一下我们前面的文章可以了解,“功能”和“函数”,本来就是一个概念——Function),那么在这个场景,相当于你的函数输出为0,目前还处于没有被激活状态。
当她打你第二个耳光时,你又想了很多,依然忍了,但上述因素的权重都开始调整了,比如性格权重下降,爱她的程度权重下降等。当她打你第n个耳光时,你终于忍不了,“忍无可忍,无须再忍”,这时函数输出超出了阈值,你扬长而去。

Q:卷积函数又是个啥?
A:依旧你暴力女友的例子,假设你的承受能力是一个在时间维度上的函数f,而你“野蛮女友”的打脸操作为函数g,那么卷积的概念,就是重新定义出来一个新的函数h(比如说,h用来刻画你的崩溃指数):h = f * g。也就是说,所谓卷积,就是一个功能(如刻画你承受能力)和另外一个功能(你女朋友打你脸的操作)在时间维度上的“叠加”作用。这个“叠加”什么意思呢?如果函数是离散的,就用求累积和来刻画。如果函数是连续的,就求积分来表达。

Q:知道了神经元的基本元素,那下一个模型是啥呀?
A:她叫感知机,基本上,感知机就是一切神经网络学习的起点啦。感知机是由两层神经元组成的,一个是输入层,一个是输出层,输入层神经元接收外界信号,然后再传递给输出层神经元,所以输入层神经元没有功能函数(激活函数),即没处理功能,输出层神经元有处理信息功能,有激活函数。
Q:感知机的学习的过程是啥?
简单来说,神经网络的学习过程,就是通过根据训练数据,来调整神经元之间的连接权值(connection weight)以及每个功能神经元的输出阈值。换言之,神经网络需要学习的东西,就蕴含在连接权值和阈值之中。但实际上,我们一开始并不能知道这几个参数的取值,而是得一步一步的‘折腾试错(try-error)’出来,而这个试错法(trial-by-error)便是感知机的学习过程。

Q:感知机是怎么样学习的呢?
首先,感知机属于‘有监督学习’,即是分类算法。感知机是由明确的目的导向,不管什么样的学习规则,能达到好的分类目的,就是好的学习规则。而对象本身的特征值,一旦确定下来就不会发生变化。因此,所谓神经网络的学习规则,即是调整权值和阈值的规则。
感知机能够很容易的实现逻辑上的与、或、非等原子布尔函数,但有个问题就是实现不了异或运算,这个坑待会会引出新的导向再说。
Q:感知机里的η是有什么作用的呀?
A:它叫做学习率,作用是“缓和”每一步权值调整强度,但本身的大小也比价难以确定,小了吧,网络调参次数多了,收敛的慢,大了吧,容易扯着蛋,从而错过了网络参数的最优解,因此合适的学习率在某种程度上,还依赖于人工经验。

Q:表征能力是啥?
A:说明,表达,表示等意思.通俗的说就是用科学的方法把某种现象表达出来。比如说感知机就能把逻辑上的与、非、或给表示出来。所以感知机具有一定的表征能力。

Q:可是感知机不能解决异或问题呀?
A:是的,所以为此,大家纠结很长一段时间额,大概十年吧,解决异或问题在于能否解决非线性可分问题,怎么来解决这个问题?简单来说,就是使用更加复杂的神经网络,越复杂的网络,表征能力就比较强。为了解决异或,我们让神经网络复杂起来,不再只有输入层和输出层,在这两层之间加上了一层神经元,称为隐含层。这样,隐含层和输出层的神经元都拥有激活函数,这样处理的功能就大了,也就可以解决异或问题了。

Q:增加了一层隐含层就不叫感知机了吧,那怎么称呼?
A:是的,感知机只有两层。为了处理异或问题,我们引入了隐含层,就不能喊感知机啦。可以称多层神经网络。常见的多层神经网络有多层前馈神经网络,这种结构下,每一层神经元仅仅与下一层的神经元全连接,而在同层之间神经元彼此不连接,而且跨层的神经元彼此也不相互连接。输入层神经元主要用于接收外加的输入信息,在隐含层和输出层中,都有内置的激活函数,可对输入信号进行加工处理,最终的结果,由输出层“呈现”出来。

Q:神经网络的学习过程,就是通过根据训练数据,来调整神经元之间的连接权值(connection weight)以及每个功能神经元的输出阈值。换言之,神经网络需要学习的东西,就蕴含在连接权值和阈值之中。对于识别某个对象来说,神经网络中的连接权值和阈值,就是它关于这个对象的“记忆(memory)”啊!

Q:能谈谈关于分布式表征的解释吗?
A:我们的大脑对事情和概念的记忆,不是存储在某个单一的地点,而是像分布式存储在一个巨大的神经网络之中。硅谷投资人王川认为,分布式表征是人工神经网络的一个核心思想。简单解释就是,当我们表示一个概念的时候,神经元和概念之间不是一对一的映射存储,它们的关系是多对多的。具体的讲,也就是说一个概念是由多个神经元共同定义表达,而一个神经元也可以参与多个概念的表达,只是该神经元所占的权重不同罢了。分布式表征有很多优点,其中最为重要的一点就是,当部分神经元发生故障时候,信息的表达不会出现覆灭性的打击。举个例子,要表达小黄车,一个神经元表示大小(形状小),一个神经元表示颜色(黄),一个神经元表示自行车,当着三个神经元同时被激活的时候就可以比较准确地表达小黄车这个物体啦。

Q:对于前馈神经网络,它的连接权值和内部阈值是整个神经网络的灵魂所在,要反复的试错训练才可以找到合适的值,而训练的抓手,就是实际输出和预期输出之间的“落差”也叫误差啦。那么怎么利用整个“落差”来反向调整神经网络参数的呢?
A:首先我们得先用个东西来描述这个“落差”的的程度,这得从机器学习中的“监督学习”里算法开始讲气啦,在假设空间F中,构造一个决策函数f,对于给定的输入X,由f(X)给出相应的输出Y,这个实际输出值Y和原先预期值Y’可能不一致。于是,我们需要定义一个损失函数(loss function),也有人称之为代价函数(cost function)来度量这二者之间的“落差”程度。这个损失函数通常记作L(Y,Y‘)= L(Y, f(X)),为了方便起见,这个函数的值为非负数(请注意:在这里我们大写Y和Y’,分别表示的是一个输出值向量和期望值向量,它们分别包括多个不同对象的实际输出值和期望值)。

Q:常见的损失函数有哪些?
A:0-1损失函数(0-1 loss function)、绝对损失函数(absolute loss function)、平方损失函数(quadratic loss function)。当然,为了计算方面,还可以用对数损失函数(logarithmic loss function)。这样做的目的,主要是便于使用最大似然估计的方法来求极值。损失函数值越小,说明实际输出和预期输出的差值也就越小,也就是说我们构建的模型也越好。

Q:损失函数有啥用啊?
A:当然有用了!因为可以用它反向配置网络中的权值(weight),让损失(loss)最小啊。前面问题已经说啦,神经网络学习的本质就是利用“损失函数”,来调节网络中的权值,让损失最小呀。

Q:那神经网络中的权值应该怎么个调法呢?
A:总体来讲,有两大类方法比较好使。第一种方法就是“误差反向传播(Error Back propagation,简称BP)”。简单的解释,就是首先随机设定初值,然后计算当前网络的输出,然后根据网络的输出与预期输出之间的差值,采用迭代算法,反向的去改变前面的各层的参数,直至网络稳定。BP算法是十分经典的算法,但是呢,用久了用多了,大家就容易发现存在问题啦,比如说,在一个层数很多的神经网络里,当它的残差(误差)反向传播到最前面的层(输入层),其影响已经变得十分的小了,甚至出现了梯度扩散,严重的影响了训练精度。其实,这也是容易理解的。因为在“信息论”中有个信息逐层缺失的说法,就是说信息在逐层处理时,信息量是不断减少的。
按照阮一峰先生的解读,当一种形式的”有序化(即信息)”,转化为另一种形式的”有序化”,必然伴随产生某种程度上的”无序化(即熵)”。依据这个理论,当神经网络层数较多时(比如说大于7层),BP反向传播算法中“误差信息”,就会慢慢“消磨殆尽”,渐渐全部变成无序的“熵”,因此就无法指导神经网络的参数调整了。

Q: 既然出现这个问题了,那该怎么办呢?
A:这就使得第二种方法孕育而生啦,也是当前主流的方法,也是“深度学习”常用的方法,“逐层初始化”(layer-wise pre-training)机制,不同于BP从后往前的算法,这个方法是从前往后逐层训练。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/690126
推荐阅读
相关标签
  

闽ICP备14008679号