进阶教程:用Python建立全新二层神经结构


640?wx_fmt=jpeg


全文共5234字,预计学习时长10分钟


进阶教程:用Python建立全新二层神经结构_第1张图片

图片来源:unsplash.com/@alinnnaaaa


本文将介绍如何建立进阶神经网络。


640?wx_fmt=jpeg

输入数据


本教程唯一使用的数据库为NumPy。




640?wx_fmt=jpeg

激活函数


在隐藏层中会使用tanh激活函数,而在输出层中则会使用sigmod函数。在两种函数的图中都很容易找到信息。下面直接执行函数。


进阶教程:用Python建立全新二层神经结构_第2张图片


以上为Sigmoid函数。以下为该函数代码:




640?wx_fmt=jpeg

设定参数

 

什么是参数和超参数?参数指权值和偏差。超参数会影响参数,并设置在学习过程开始之前。准确无误设置超参数并不容易,需要不断调整数值。超参数包括学习率、迭代次数、校准率等。

 

想知道如何设置矩阵规模吗?看看下面的答案吧!


进阶教程:用Python建立全新二层神经结构_第3张图片


这是什么意思呢?例如:


(第0层,即L=0),输入层神经元数量=3

(第1层,即L=1),隐藏层神经元数量=5

(第2层,即L=2),输出层神经元数量=1


640?wx_fmt=jpeg


希望以上代码都能奏效!现在设置参数。




定义变量W1、b1、W2和b2。变量初始值设为0也无妨。但初始化权值时要格外谨慎。初始值绝不能为0。为什么?若权值初始值为0,函数Z = Wx + b的值恒为0。多层神经网络中,每层的神经元共同作用。所以应该如何设置初始权值呢?本文使用he初始化。


进阶教程:用Python建立全新二层神经结构_第4张图片

公式




除he初始化以外,也可以使用以下方法:




建议:在参数初始化中,请勿将权值设为0或大数值。


640?wx_fmt=jpeg

前向传播


进阶教程:用Python建立全新二层神经结构_第5张图片

前向传播


上图清晰解释了前向传播。在Python中的应用为:




为什么要储存 {‘Z1’: Z1, ‘Z2’: Z2, ‘A1’: A1, ‘y’: y}?因为在反向传播中会用到这些数值。


640?wx_fmt=jpeg

成本函数


刚才介绍了前向传播,得到预测值(y)。这个值由成本函数计算得出。下图可以说明:


进阶教程:用Python建立全新二层神经结构_第6张图片


640?wx_fmt=jpeg

更新参数


更新参数后找到可能最小化成本的最佳参数,本文不会对此再做探讨。但在上一段提到,如果数值在抛物线右侧,导数(斜率)为正,数值递减,左移接近最小成本值;若数值在抛物线左侧,斜率为负,因此参数会增至预期的最小成本值。


以下为使用的成本函数:


640?wx_fmt=jpeg

成本函数


此成本函数的Python代码:




640?wx_fmt=jpeg

反向传播


确定成本后,下面返回去求权值和偏差的导数。




def backPropagation(X, Y, params,cache)中的parama和cache是什么?在前向传播中储存数值,就是为了用于反向传播。Params是参数(权值和偏差)。


640?wx_fmt=jpeg

更新参数

 

得到参数后,代入以下公式:


640?wx_fmt=jpeg


公式中alpha (α)是超参数的学习率。在学习开始前需要设置数值。在学习率右侧的数值为导数。alpha和导数已知,可以更新参数。




640?wx_fmt=jpeg

循环是关键


需要多次迭代才能找到回归最低成本的参数。现在开始循环!




Hidden_size指隐藏层中神经元数量。由于在学习开始前设定,它类似于超参数。return params, cost_指找到的最佳参数。cost_为每次迭代预估的成本。


640?wx_fmt=jpeg

运行代码!


使用sklearn创建数据集。




X为输入值,Y为实际输出值。




本文中学习率设置为0.3,隐藏层神经元数量为5,迭代次数为5000.当然也可设置不同数值尝试。


下面画图以说明每次迭代中成本函数的变化。




进阶教程:用Python建立全新二层神经结构_第7张图片


结果正确!




完整代码:



640?wx_fmt=jpeg

留言 点赞 发个朋友圈

我们一起分享AI学习与发展的干货


编译组:蒋馨怡、胡昕彤

相关链接:

https://medium.com/better-programming/how-to-build-2-layer-neural-network-from-scratch-in-python-4dd44a13ebba


如需转载,请后台留言,遵守转载规范


推荐文章阅读


ACL2018论文集50篇解读

EMNLP2017论文集28篇论文解读

2018年AI三大顶会中国学术成果全链接

ACL2017 论文集:34篇解读干货全在这里

10篇AAAI2017经典论文回顾


长按识别二维码可添加关注

读芯君爱你


你可能感兴趣的:(进阶教程:用Python建立全新二层神经结构)