查看原文
其他

【强基固本】漫谈什么是AI框架?



“强基固本,行稳致远”,科学研究离不开理论基础,人工智能学科更是需要数学、物理、神经科学等基础学科提供有力支撑,为了紧扣时代脉搏,我们推出“强基固本”专栏,讲解AI领域的基础知识,为你的科研学习提供助力,夯实理论基础,提升原始创新能力,敬请关注。

来源:知乎—ZOMI酱
地址:https://zhuanlan.zhihu.com/p/360885540
最近一个月朋友老来问我:“什么才是AI框架?”,于是趁着夜深人静的时候,真正地去梳理什么是AI框架,下面是我对AI框架的一些思考。
到底什么是AI算法?什么是神经网络?神经网络有什么用?为什么神经网络需要训练?什么是模型?AI框架有什么用?AI框架能解决什么问题?
上面的几个问题其实还挺有挑战的。下面我们来对清楚一些基本概念:深度学习是机器学习研究领域中的一种,深度学习的概念源于对人工神经网络的研究,很多深度学习算法都使用神经网络进行表示,因为神经网络的性能精度和通用效果都非常好,于是业界习惯性地把深度学习算法等同于AI。

AI与深度学习关系

这篇文章,先介绍神经网络的基本概念;然后通过函数逼近来解析神经网络的数学原理;之后介绍反向求导如何求神经网络中参数的偏导,从而迭代地求解神经网络中的最优值;最后根据个人的思考,畅想下一代的AI框架演进方向。


01

神经网络
现在业界比较通用对神经网络概念的解释是:
1)从通用概念的角度上来看的话,神经网络是在模拟人脑的工作机制,神经元与神经突触之间的连接产生不同的信号传递,每个神经元都记录着信号的特征。
2)从统计学的角度来说,就是在预测数据的分布,从数据中学得一个模型,然后再通过这个模型去预测新的数据(这一点就要求测试数据和训练数据必须是同分布)。
上面都太虚啦,我们来聊聊什么是神经网络:一个神经网络由多个神经元结构组成,每一层的神经元都拥有多个输入和输出,一层可以由多个神经元组成。例如第2层神经网络的神经元输出是第3层神经元的输入,输入的数据通过神经元上的激活函数(非线性函数如tanh、sigmod等),来控制输出的数值。
数学上简单地理解,单个神经元其实就是一个X·W的矩阵乘,然后加一个激活函数fun(X·W),通过复合函数组合神经元,就变成一个神经网络的层。


02

函数逼近
如果把神经网络看做一个复杂函数,那么这个函数可以逼近任何函数。上面只是定义了什么是神经网络,其实神经网络内部有很多参数需要通过求解函数逼进来确定的。
直观地看下一个简单的例子:假设1个圆圈代表一个神经元,那么一个神经元可模拟“与或非”3种运算,3个神经元组成包含1个隐层的神经网络即可以模拟异或运算。因此,理论上,如此组合的神经网络可模拟任意组合的逻辑函数。
很多人会说神经网络只要网络模型足够深和足够宽,就可以拟合(fit)任意函数,这样的说法数学理论上靠谱吗?严格地说,神经网络并不是拟合任意函数,其数学理论建立在通用逼近定理(Universal approximation theorem)的基础之上:
神经网络则是传统的逼近论中的逼近函数的一种推广。逼近理论证明[1],只要神经网络规模经过巧妙的设计,使用非线性函数进行组合,它可以以任意精度逼近任意一个在闭集里的连续函数。
既然神经网络模型理论上能够逼近任何连续函数,那么有意思的事情就来了。我们可以利用神经网络处理数学上分类、回归、拟合、逼近等问题啦。例如在CV领域对人脸图像进行分类、通过回归检测图像中的车辆和行人,在NLP中对离散的语料数据进行拟合。
可是,神经网络介绍现在还只能逼近任何函数,逼近函数需要求解,我们怎么去求解神经网络呢?
函数逼近求解:在数学的理论研究和实际应用中经常遇到逼近求解问题,在选定的一类函数中寻找某个函数f,使它与已知函数g(或观测数据)在一定意义下为最佳近似表示,并求出用f近似表示g而产生的最小误差(即损失函数):loss(w)=f(w)-g。
所以,神经网络可以通过求解损失函数的最小值,来确定这个神经网络中的参数w,从而固化这个逼近函数。


03

反向求导
深度学习一般流程是:
1)构建神经网络模型,
2)定义损失函数和优化器,
3)然后开始训练神经网络模型,
4)最后验证精度。
因为AI框架已经帮我们封装好了许多功能,所以遇到神经网络模型的精度不达标,算法工程师可以调整网络模型结构、调节损失函数、优化器等参数重新训练,不断地测试验证精度,因此很多人戏称算法工程师又是“调参工程师”哈。
但是在这一过程中,我发现这种机械的调参是无法触碰到深度学习的本质的,为了了解实际的工作原理,当初我看了很多资料,学习了一个结论:训练的过程本质是进行反向求导的过程,然后通过迭代计算求得神经网络中的参数,我们调整的参数是控制这一过程的前进速度和方向。
好吧, 上面这段话我们仍然听不懂,没关系。我们需要了解的是,什么是训练?训练的作用是什么?为什么要求导?为什么在训练的过程中用到求导?求导的数学依据和意义在哪里?
下面是导数的定义。
导数是函数的局部性质。一个函数在某一点的导数,描述该函数在这一点附近的变化率。如果函数的自变量和取值都是实数的话,函数在某一点的导数就是该函数所代表的曲线在这一点上的切线斜率。
那么,针对导数的几何意义,其可以表示为函数在某点处的切线斜率;在代数上,其意味着可以求得函数的瞬时变化率。如果把神经网络看做一个高维复杂的函数,那么训练的过程就是对损失函数进行求导,利用导数的性质找到损失函数的变化趋势,每次一点点地改变神经网络仲的参数w,最后逼近得到这个高维函数。
因此,一个AI框架,最核心和基础的功能是自动求导。
接下来有个更加重要的问题,深度学习中的神经网络为什么需要反向求导?
按照高中数学的基本概念,假设神经网络是一个复合函数(高维函数),那么对这个复合函数求导,用的是链式法则。举个简单的例子,考虑函数    ,其中    ,其中    是可微函数,那么对函数z关于t求导,函数会顺着链式向外逐层进行求导。
  
既然有了链式求导法则,而神经网络其实就是个庞大的复合函数,直接求导不就解决问题了吗?反向到底起了什么作用?下面来看几组公式。
假设神经网络为公式   ,对损失函数求神经网络中各参数求偏导,可以看到在接下来的求导公式中,每一次导数的计算都可以重用前一次的的计算结果,于是Paul Werbos在1975年发明了反向传播算法(并在1990重新使用神经网络对反向求导进行表示)。这里的反向,指的是图中的反向箭头,每一次对损失函数中的参数进行求导,都会复用前一次的计算结果和与其对称的原公式中的变量,更方便地对复合函数进行求导。


04

什么是AI框架
讲了很多原理,那到底什么是AI框架?
下面左图的公式是神经网络表示的复合函数表示,蓝色框框表示的是AI框架,AI框架给开发者提供构建神经网络模型的数学操作,AI框架把复杂的数学表达,转换成计算机可识别的计算图。
定义整个神经网络最终的损失函数为Loss之后,AI框架会自动对损失函数求导(即对神经网络模型中各个参数求其偏导数)。上面提到过,每一次求导都会复用前一次的计算结果和与其对称的原公式中的变量。那么干脆直接基于表示神经网络的计算图计的基础之上,构建一个与之对称的计算图(反向计算图)。通过反向计算图表示神经网络模型中的偏导数,反向传播则是对链式求导法则的展开。
通过损失函数对神经网络模型进行求导,训练过程中更新网络模型中的参数(函数逼近的过程),使得损失函数的值越来越小(表示网络模型的表现越好)。这一过程,只要你定义好网络AI框架都会主动地帮我们完成。
很有意思的是,AI框架对整体开发流程进行了封装,好处是让算法研究人员专注于神经网络模型结构的设计(更好地设计出逼近复合函数),针对数据集提供更好的解决方案,研究让训练加速的优化器或者算法等。
综上所述,AI框架最核心的是提供开发者构建神经网络的接口(数学操作),自动对神经网络训练(进行反向求导,逼近地求解最优值),得到一个神经网络模型(逼近函数)用于解决分类、回归、拟合的问题,实现目标分类、语音识别等应用场景。


05

AI框架的作用
在交通领域,通过AI框架开发的深度学习算法可以用于检测车辆违停、逆行等行为,用于交警执法。另外在交通路口上面摄像头,现在大部分已经默认植入了AI框架,能够直接精确地识别车辆的车牌号、颜色、车型、车辆里的人物等来辅助更好地交通管理,甚至在发生交通事故和交通拥堵时进行报警等。
在金融行业,银行通过AI框架,对以百万的消费者数据(年龄,职业,婚姻状况等)、金融借款和保险情况(是否有违约记录,还款时间,车辆事故记录等),根据社交关系建立图神经网咯模型,对用户的行为和关系进行分析,进而判断出贷款服务的风险、系数来帮助交易员更好地判断。
随着医疗信息化和数字化诊断的发展,医疗监测指标不断增长,数据量越来越庞大,亟需强大的数据处理能力为医疗领域提供有力的支持。目前我国医学影像数据年增长率约为30%,而放射科医师数量年增长率仅4.1%,放射科医师数量增长远不及影像数据增长。这意味着,医学图像识别领域存在巨大缺口,市场潜力巨大。下图是美国国立卫生研究院(NIH)的研究人员使用AI框架,基于真实放射学影像的大型数据集,使用深度学习算法进行病变检索和匹配的研究。
随着大数据时代的来临,以及计算资源和人工智能技术的大幅度提升,新模型、新理论的验证周期将大大缩短,深度学习算法的进步,会使得AI框架使能千行百业,进入每一个家庭,每一个组织,深刻地推动智能化技术的发展。


06

AI框架的未来
针对AI框架的发展方向,目前主要看到三个方向:
1)深度学习与传统机器学习结合,比如深度概率学习、图神经网络等,这一块基本上业界的AI框架都已经支持。
2)计算图形相关的,类似Taichi这样的语言和框架,提供可微物理引擎、可微渲染引擎等。
3)未来是一个大数据融合的时代,传统的科学计算将会结合AI的方法去求解既定的问题。至于AI与科学计算结合,看到业界在探索三个方向。
3.1)一是AI建模替代传统的计算模型,目前已经有很大的进展了,如拿了戈登贝尔奖的分子动力学模型DeepMD。
3.2)二是AI求解,模型还是传统的科学计算模型,但是使用深度学习算法来求解,这个方向已经有一定的探索,目前看到不少基础的科学计算方程已经有对应的AI求解方法,比如PINNs、PINN-Net等,当然现在挑战还很大,特别是在精度收敛方面,如果要在AI框架上使用AI求解科学计算模型,最大的挑战主要在前端表达和高性能的高阶微分。
3.3)三是使用AI框架来加速方程的求解,就是科学计算的模型和方法都不变的前提下,与深度学习使用同一个框架来求解,其实就是把AI框架看成面向张量计算的通用分布式计算框架。
希望自己能够继续坚持,再写一篇《深入AI框架》,来谈谈我对从Tensorflow、Pytorch、MindSpore这几个框架的深入技术方案,探讨其核心功能的不同点。
[1] Cybenko,G.(1989),控制、信号和系统数学,2(4),303-314

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“强基固本”历史文章


更多强基固本专栏文章,

请点击文章底部“阅读原文”查看



分享、点赞、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存