大家好呀,小马我又来给大家头脑风暴了,我的神秘三叉戟LSTM-CNN-Attention模型到上期为止已全部为一一揭秘,之后怎么用就看大家各显啦~
今天开始,我即将给大家详细介绍目前算法领域的当红辣子鸡——神经网络。相信对这个概念,大家都有点熟悉,毕竟“没吃过猪肉,不一定没见过它跑”。话不多说,我们即刻开讲~
1779年,英格兰的一个纺织工奈德·卢德在中砸毁了两台纺织机。彼时英国正值机器,的纺织工人们摧毁了大量的工业设备,英国为此通过了专门的法律“机器”是要判死刑的。“卢德”派们对技术进步的,事明是如此。机器带动了社会的进步,最终使得人们的生活更加富余美好,而在当时,对新技术的恐惧却是社会上无法挥去的阴霾。
如今尽管机器学习(ML,Machine Learning)已经在各领域都取得了巨大的成功,却仍然不断有人跳出来质疑其可靠性。比如:金融交易如此复杂哪少得了我们人的判断,医学图像诊断由算法来给岂不是对生命不负责任,智能驾驶怎么可能比人更安全,等等等等。这些卢德派们最常用的说法是“机器学习就是一个黑盒,说不定哪里就出问题了”。
而实际上,如果你本身实践过机器学习,从传统的回归算法、贝叶斯方法,决策树等到人工神经网络(ANN,Artificial Neural Network)都有一定了解,那机器学习(包括ANN)对你来说应该是一个“白盒”,不过就是一组依赖数据,从而进行模式识别的函数而已。但往往来源于,人们总是不相信他们无解的事物,对此,最好的解药唯有——“教育”。
这里小马抛砖引玉,以最浅显易懂的方式解释一下,人工神经网络的基本原理和构成,希望能消除一些大家对ANN的疑虑,也欢迎大家来沟通交流。
现实中问题的解决过程往往都是一个寻找映射关系(或函数)的过程。比如个人信用评分问题:我们便是找 “个人客户信息”和“信用评分”之间的映射关系。实际问题一般都比较复杂,不仅仅只是一个变量x到y的线性关系,个人客户信息就是的,且有些信息如学历等是类别标签而非连续变量。为了简化问题,这里我们假设客户信息只有一个变量——存款,我们需要建立的映射关系则是存款与信用评分之间关系,如下图所示:
假设当存款小于某个值时,信用评分为0,存款越多,评分越高,最高为100分。这个函数可以有多种形式的表示,比如最常见的办法用多项式拟合:f(x)= a+bx+cx²+dx³+...,只要项数足够多,用来近似表示一个特定范围的连续方程肯定不在话下。除多项式拟合的方法外,这样一个有上限的函数递增部分也可以用指数函数来表示:f(x)=100-,当x很大时,指数项 接近于0。
若我们实在想要得瑟一下的话,这个简单的函数也可以用万能的神经网络来模拟。神经网络由一个个基本的神经元构成,可以用来模拟任意一个连续函数。其表达函数的理论基础在于万能近似(universal approximation theorem):任意连续函数f,都可以用只有一层隐含层(但要有足够多的神经元)的神经网络实现。只要你敢想,没有什么做不到~
一个基本神经元计算单位由一个线性运算和一个非线形运算连接而成。线形运算 f(x)=wx+b 是对输入信号的缩放(w控推背图 详解制)和偏置(b控制),而非线性运算就像一个阀门,控制信号只在突破阈值后才能向后传递。非线性运算可以有很多种,常见的如sigmoid方程:
这个函数的特点为,信号 z 只在0附近的小范围内近似线形输出,在很小时输出为0,很大时输出为1(如图2所示)。综合这两部分,这样一个神经元由两个参数(权重w 和偏置b )控制,对应输入x ,输出为:
由之前的动图我们知道,w控制神经元输出曲线的陡峭程度,b控制神经元的偏置,所以r=-b/w决定了阶梯的:
若将输出曲线近似看为阶梯曲线,现在我们考虑两个这样的神经元(a)、(b)。(a)中的偏移r为0.4,w为0.8;(b)中的r为0.6,w为-0.8。通过加权求和,我们可以得到一个台阶状的输出曲线:台阶的起始与终结点由两个神经元各自的r参数控制,高度则由加权求和时的权重控制。
图6 神经元构造台阶函数示意。(a)和(b)为参数不同的两个神经元,(c)为两个神经元输出的加权和构造的台阶函数
当得到这样的一个台阶函数之后,任你千奇百怪的函数,都可以由不同不同高度的台阶函数拼接得到。如图7所示,我们通过8个神经元构造的函数较好的拟合了原函数的趋势。由此可以推理得出,只要隐层的神经元数目够多,任意的函数形式都可以由神经网络逼近。
当然实际生活中的问题不是这么简单,正如我们前面所说,客户信息不仅仅是一个变量,而是一个向量,有许多的特征变量如存款,学历,年龄等,因而每个神经元的参数也必须是一个向量。虽然特征变量可能是标签,需要做编码操作;输入和输出也不会都是0~1之间的连续变量,需要预先对数据作标准化处理等。但是万变不离其,只要一个有一层隐层的神经网络神经元够多,就有足够牛逼的学习能力。
图9是2011年一个翻译任务的两种模型的比较,同样的参数数目下,深层的网络明显表现更好。作者在讨论中指出,深层模型中,后一层将前一层的中间输出作为输入,类似于前一层在做模块化(modularization),会使后一层的分类效果变好。简单来说比如我们有个猫狗分类任务,前一层在做“脸是圆的还是长的”、“有没有露出长舌头”之类的模块化工作,后一层由此作为依据,分类会更准确。
可以看到,早期的人工神经网络其实是很好理解的,随后出现的CNN、RNN等其他网络结构等也都是由设计者按预想构建出来的。作为设计者和工程师,这样的神经网络是优美、高效、透明的方法,完全没有“黑盒”一说。但若不深入理解,对神经网络进行种种想当然地调整,创造出各种奇形怪状的网络结构,并移植到各种任务上,把它当作“黑盒”来使,就如不得门心法,光学招式(就像那谁谁谁)。虽然得益于强大的算力支持,经常还能得到不错的结果,但这毕竟不是长久之计,理论上的匮乏会导致研究上的盲目和误入,同时在生产中还会造成种种不可预估的风险。