(31)第五节课从零起步通过Adaptive Learning和Feature Normalization优化AI框架
第五节课:从零起步通过Adaptive Learning和Feature Normalization优化自己编写的AI框架
本节从零起步通过Adaptive Learning和Feature Normalization优化自己编写的AI框架,人工智能的框架优化及人工智能应用程序开发的优化。人工智能的优化会有很多技术,优化的技术多达几百种,本节分享的是其中的2种方式:Adaptive Learning优化和Feature Normalization优化。
本节分享的具体内容:
(1) 自己编写的AI框架性能测试及问题剖析
(2) 采用Adaptive Learning进行性能优化编码
(3) 使用Feature Normalization
本章节我们将实现自研盘古人工智能框架的性能优化,将新增FeatureNormalization.py.py代码,要实现的目录结构代码如图所示:
回顾一下前面的内容,TensorFlow的可视化图我们已经反复研究,TensorFlow是目前人工智能工业界和实际运用的领域使用最流行、最广泛,功能最强大的人工智能框架,参照TensorFlow的可视化图,我们在前面的章节中已经实现了整个AI盘古框架的骨架,包括输入层Input Layer、隐藏层Hidden Layers、以及输出层Output Layer;对权重的赋值;Forward Propagation、Back Propagation算法。
TensorFlow的可视化图中,如果激活函数选择Sigmoid,进行Classification操作,单击运行按钮,发现损失度的降低非常缓慢;如果激活函数选择ReLU,进行Classification操作,单击运行按钮,会发现损失度收敛的速度非常快;如图所示。其他也可以测试Tanh的激活函数,速度也是可以的。
图 1- 48 Sigmoid 、ReLU激活函数损失度比较
接下来一个很重要的内容是优化,损失度收敛度的问题包含多方面:可能是激活函数的问题;可能是输入数据的问题;也可能是运行的过程中,Back Propagation算法收敛时学习率的问题;由于整个梯度下降的过程中有很多个局部最低点,也可能梯度下降时候达到的是局部极低点,不一定是整个梯度下降的最低点。围绕这些内容会有很多优化的方法,本节讲解的是Adaptive Learning和Feature Normalization优化。
在进行收敛的过程中,先不考虑多个极值点的情况,只考虑有1个最低点的情况,如果步伐太大,收敛时就会出现荡秋千的过程,永远到不了最低点,因为每次的步伐太大,从左侧的一个点跃过了最低点,到达了右侧的一个点,然后下一次收敛的时候,步伐又太大,从右侧的点跃过了最低点,到达了左侧的一个点,如此反复跃到右侧,又跃到左侧......导致的结果是测试很多次,精确度或损失度并没有太大的变化,损失度没有极大的降低,精确度没有极大的提升 此时,如果使用Adaptive Learning优化,将上次损失度的减少和这一次损失度的减少做一个比较,如果步伐太大,就进行调整,将步伐变小一点。
在进行收敛的过程中,如果步伐太小,会导致收敛速度太慢,而做人工智能核心追求是最短的时间内,最快最准确接近实际的情况,第一个是时间的使用,第二个是精确度的使用。无论步伐太大,还是步伐太小,都要进行相应的调整。
关于数据源的问题,在做实际项目的时候,数据拿过来不可以直接使用,要进行数据的预处理操作,但有时候即使数据初步符合你的要求,进行了预处理也还是不够的。如图所示,损失度的计算公式为预测值减去真实值的平方除以2,然后进行累加。
这个计算公式运用在损失函数的计算,数据进行了初步的处理,使用Sigmoid激活函数,使用Back Propagation的时候对激活函数进去求导,数据如果只有0和1,或者数据包含100、1000、-80....等数据,那这个数据是否是一种最理想最佳的状态?
Sigmoid的Y轴值区间是0到1,X轴从-4到4之间的变化非常明显,如果X轴小于-4或者大于4,数据不是有效的数据,Y轴变化就不明显了,因此推出了正则化的过程。 我们案例中instances数据中只包含了0和1,有没有必要进行正则化? 其实有必要进行正则化,因为要么是0,要么是1,数据的变化不太明显,如果进行正则化,将0到1之间代表的数据变成-4到4之间的数据,理论上讲会带来更有明显的训练效果,之所以是从理论上讲,是因为人工智能的优化有很多的因素,机器学习或人工智能的专家或者做人工智能应用程序的开发者,他们的大多数时间都在反复调整优化参数。
之所以Adaptive Learning能进行性能优化是因为有时候学习率不太恰当,永远无法达到最低值。
之所以Feature Normalization的正则化优化是因为数据超过了有效处理的范围,或者有效处理的范围太小,不能很好的运用你的算法。Sigmoid函数有效的空间是-4到4之间,也可能使用Softmax函数,其有效空间是-2到2之间。TensorFlow的可视化图中,有很多的激活函数:ReLU、Tanh、Sigmoid、Linear,不同的激活函数的正则化区间不太一样,也可能是高斯分布等。如使用Tanh激活函数,运行的效果也是不错的。