9.2 增加和调整alpha参数
接下来我们看一下ANN_V3.py的代码。
ANN_V3.py的源代码如下:
在Spyder集成开发环境中运行ANN_V3.py,运行结果如下:
在ANN_V3.py的源代码中:
第27行代码随机初始化权重,权重synapse_0是一个2×1的矩阵。将权重的第1行第1列的值作为三维空间的x维度,将权重的第2行第1列的值作为三维空间的y维度,将误差layer_1_error作为三维空间的z维度,就形成了三个维度的空间(x,y,z),如图9-10所示。从三个维度x、y、z的角度,z是误差本身,x、y是不同的权重。
第33行代码将输入值与权重进行点积运算,经过Sigmoid激活函数计算得到输出值,前向传播算法实现过程如图9-11所示。
图9-10 权重及误差图
图9-11 前向传播算法实现过程
第36行代码计算误差,将预测值减去实际值得到误差值。
第39~43行代码通过反向传播算法更新权重,如图9-12所示。
ANN_V3.py是朴素梯度下降的过程,这种方式很简单。ANN_V3.py是2层网络,ANN_V4.py增加了1层隐藏层,是3层网络。ANN_V4.py在ANN_V3.py的基础上对权重更新进行了优化。
ANN_V4.py的源代码如下:
图9-12 反向传播算法实现过程
在ANN_V4.py的代码中:
第4行代码构建alphas的列表,alpha包括0.001、0.01、0.1、1、10、100、1000。
第25行代码循环遍历alphas的各个值,比较在不同alpha取值时误差的大小。
第36~38行实现前向传播算法,如图9-13所示。
图9-13 前向传播算法的实现过程
第47~56行实现反向传播算法及进行权重更新,如图9-14所示。
ANN_V4.py代码的主要改进是第55、56行,这两行代码调节权重,权重更新时乘以alpha系数,不同的alpha值表示不同的步伐,步伐有可能太大,也有可能太小。alphas是我们声明的一个数组,alphas=[0.001,0.01,0.1,1,10,100,1000]。
在Spyder中运行ANN_V4.py,运行结果如下:
图9-14 反向传播算法实现过程
查看alphas分别为0.001、0.01、0.1、1、10、100、1000时的情况,alphas为1、10的时候效果是最理想的,alphas为0.001时不太好,alphas为1000时就更不好了。从实际运行的结果看,alphas为10的时候效果是最好的,这表明0.001、0.01、0.1的步伐太小。
在TensorFlow人工智能框架中,alphas值表示为学习率,学习率可以设置为0.00001、0.0001、0.001、1、3、10等,学习率是一个参数,可以调整。
图9-15 TensorFlow的学习率设置