基于numpy的前馈神经网络(feedforward neural network)

本文是作者通过Coursera的深度学习课程,动手实现前馈神经网络的实践过程。介绍了前馈神经网络的基本结构和工作原理,包括神经元、权重、偏置和激活函数的作用。详细讲解了激活函数的种类,如sigmoid、tanh和relu,并解释了为何在神经网络中使用非线性变换的重要性。此外,还讨论了训练神经网络时的损失函数、反向传播算法以及参数更新的过程。文章最后分享了作者在编写代码过程中的经验和收获,强调了初始化权重、理解和调试算法的重要性。
摘要由CSDN通过智能技术生成

***
代码部分可以直接通过Jupyter Notebook来查看


这几天在上Andrew Ng教授开的Coursera系列课程Deep Learning,总觉得光是看视频和做作业还不够,还是得自己动手写写代码,亲自实现课程里提到的算法内容,于是便有了这篇博客,作为自己入门深度学习的里程碑吧。

前馈神经网络

机器学习有两个基本问题,一是回归,二是分类,神经网络大多用于解决分类问题,前馈神经网络(feedforward neural network)是整个神经网络家族中较为常见和较为基础的一种,如下图右上角的DFF所示。图片来源是Cheat Sheets for AI, Neural Networks, Machine Learning, Deep Learning & Big Data

神经网络中的基本元素是神经元,每层都有一定数量的神经元,神经元组合的多样性决定了神经网络的丰富性。下面是一个简单的前馈神经网络,总共有三层,从左到右分别是输入层、隐层和输出层,输入层的x1和x2表示这个样本只有两个特征(自变量),因为输入层通常不计入内,所以这是一个两层的神经网络,第一层有4个神经元,第二层只有1个。注意,隐层可以不止一层,隐层设置得越多,整个神经网络越庞大。

这个神经网络的工作原理是,给定一个样本的数据,将数据传输到第一层,进行线性变换和激活变换,得到加工过后的数据,这份新数据传到第二层,作为第二层的输入,接着进行线性变换和激活变换,又得到一份新的数据,因为第二层是最后一层了(如果不止两层就一直进行这样的操作直到抵达最后一层为止),所以最终的输出作为我们对该样本的预测值y_hat。

每一个神经元如同工厂的流水车间的机器,它重复做着四件事情:【接受上一层数据作为输入>>线性变换>>激活变换>>输出数据到下一层】,每个神经元中有三个组成部分:权重(weight)矩阵W,偏置(bias)向量b,以及激活函数(activation function) g,用公式表达为下图,其中上标(i)表示这是第i个样本数据,上标[1]和[2]分别表示这是神经网络的第一层与第二层:

$z^{[1](i)} = W^{[1]} x^{(i)} + b^{[1]} $
$a^{[1](i)} = \tanh(z^{[1](i)})$
$z^{[2](i)} = W^{[2]} a^{[1](i)} + b^{[2]}$
$\hat{y}^{(i)} = a^{[2](i)} = \sigma(z^{ [2](i)})$
$y^{(i)}_{prediction} = \begin{cases} 1 & \mbox{if } a^{[2](i)} > 0.5 \\ 0 & \mbox{otherwise } \end{cases}$

公式(1)中,通过简单的线性变换得到了z[1],z称为prev_activation,接着通过激活变换(这里用的激活函数是tanh函数,下面会讲到),得到了a[1],称为activation,公式(3)(4)表达的是第二层的线性变换和激活变换,和第一层大同小异,只不过第二层的激活函数用的不是tanh函数而是sigmoid函数。

激活函数有下面三种,都是执行了非线性变换,实现的效果都是将prev_activation转化为activation。

$ sigmoid(z) = \frac{1}{1+e^{-z}} $
$ tanh(z) = \frac{e^{z} - e^{-z}}{e^{z} + e^{-z}} = 2 sigmoid(2z) - 1 $
$
relu(z) =
max(0, z) =
begin{cases}

z, & z>0 \\

0, & z leq 0
end{cases}
$

每一个神经元都可以从上面三种激活函数中选取一个作为自己的激活函数g,经验表明,使用tanh函数的效果总是碾压使用sigmoid函数,所以人们大多使用tanh作为激活函数,近年来人们发现了relu函数,发现它的性能比tanh更好,relu成为了广受欢迎的激活函数。既然sigm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值