AI 框架作用
深度学习范式主要是通过发现经验数据中,错综复杂的结构进行学习。通过构建包含多个处理层的计算模型(网络模型),深度学习可以创建多个级别的抽象层来表示数据。例如,卷积神经网络 CNN 可以使用大量图像进行训练,例如对猫狗分类去学习猫和狗图片的特征。这种类型的神经网络通常从所采集图像中,包含的像素进行学习。
本章将从深度学习的原理开始,进而深入地讨论在实现深度学习的计算过程中使用到的 AI 框架,看看 AI 框架具体的作用和目的。
1. 深度学习原理
深度学习的概念源于人工神经网络的研究,但是并不完全等于传统神经网络。在叫法上,很多深度学习算法中都会包含”神经网络”这个词,比如:卷积神经网络 CNN、循环神经网络 LSTM。所以,深度学习可以说是在传统神经网络基础上的升级,约等于神经网络。
虽然深度学习理论最初创立于上世纪八十年代,但有两个主要原因导致其直到近年来才得以发挥巨大作用:
1)深度学习需要大量的标签化数据。例如,无人驾驶汽车模型训练需要数万亿张图片和数千万小时的视频进行学习。
2)深度学习需要巨大的计算能力。例如,需要局别并行架构和集群组网能力的高性能 GPU/NPU 对于深度学习计算进行加速。
2. 神经网络
现在业界比较通用对神经网络概念的解释是:
1)从通用概念的角度上来看的话,神经网络是在模拟人脑的工作机制,神经元与神经突触之间的连接产生不同的信号传递,每个神经元都记录着信号的特征。
2)从统计学的角度来说,就是在预测数据的分布,从数据中学得一个模型,然后再通过这个模型去预测新的数据(这一点就要求测试数据和训练数据必须是同分布)。
实际上,一个神经网络由多个神经元结构组成,每一层的神经元都拥有多个输入和输出,一层可以由多个神经元组成。例如,第 2 层神经网络的神经元输出是第 3 层神经元的输入,输入的数据通过神经元上的激活函数(非线性函数如 tanh、sigmod 等),来控制输出的数值。
数学上简单地理解,单个神经元其实就是一个 𝑋·𝑊 的矩阵乘,然后加一个激活函数 𝑓𝑢𝑛(𝑋·𝑊),通过复合函数组合神经元,就变成一个神经网络的层。这种模拟生物神经元的数学计算,能够很好地对大规模独立同分布的数据进行非线性映射和处理,使得其能够应对到人工智能的不同任务,如图7-46所示。
图7-46 模拟生物神经元的数学计算
3. 函数逼近
现在,如果把神经网络看做一个复杂函数,那么这个函数可以逼近任何函数。上面只是定义了什么是神经网络,其实神经网络内部的参数(神经元链接间的权重)需要通过求解函数逼进来确定的。
直观地看下一个简单的例子:假设 1 个圆圈代表一个神经元,那么一个神经元可模拟“与或非”3 种运算,3 个神经元组成包含 1 个隐层的神经网络即可以模拟异或运算。因此,理论上,如此组合的神经网络可模拟任意组合的逻辑函数,如图7-47所示。
图7-47 组合的神经网络可模拟任意组合的逻辑函数
很多人会说神经网络只要网络模型足够深和足够宽,就可以拟合(fit)任意函数,这样的说法数学理论上靠谱吗?严格地说,神经网络并不是拟合任意函数,其数学理论建立在通用逼近定理(Universal approximation theorem)的基础之上:
神经网络则是传统的逼近论中的逼近函数的一种推广。逼近理论证明,只要神经网络规模经过巧妙的设计,使用非线性函数进行组合,它可以以任意精度逼近任意一个在闭集里的连续函数。
既然神经网络模型理论上能够逼近任何连续函数,那么有意思的事情就来了。可以利用神经网络处理数学上分类、回归、拟合、逼近等问题啦。例如在 CV 领域对人脸图像进行分类、通过回归检测图像中的车辆和行人,在 NLP 中对离散的语料数据进行拟合。
可是,神经网络介绍现在还只能逼近任何函数,逼近函数需要求解,怎么去求解神经网络呢?
函数逼近求解:在数学的理论研究和实际应用中经常遇到逼近求解问题,在选定的一类函数中寻找某个函数 𝑓,使它与已知函数 𝑔(或观测数据)在一定意义下为最佳近似表示,并求出用 𝑓 近似表示 𝑔 而产生的最小误差(即损失函数):
𝑙𝑜𝑠𝑠(𝑤)=𝑓(𝑤)−𝑔
:eqlabel:fund_02_eq1
所以,神经网络可以通过求解损失函数的最小值,来确定这个神经网络中的参数 𝑤,从而固化这个逼近函数。
4. 反向求导
深度学习一般流程是:1)构建神经网络模型,2)定义损失函数和优化器(优化目标),3)开始训练神经网络模型(计算梯度并更新网络模型中的权重参数),4)最后验证精度,其流程如图7-48所示,前三步最为重要。
图7-48神经网络反向求导过程
因为 AI 框架已经帮封装好了许多功能,所以遇到神经网络模型的精度不达标,算法工程师可以调整网络模型结构、调节损失函数、优化器等参数重新训练,不断地测试验证精度,因此很多人戏称算法工程师又是调参工程师。