欢迎光临散文网 会员登陆 & 注册

激活函数与前向传播----「深度学习#1」

2023-07-19 17:43 作者:kinglegend  | 我要投稿

numPy基础

数组的维数通过np.dim()函数获得,数组的形状通过实例变量.shape获得。

二维数组通常称为矩阵,数组的横向排列称为,纵向排列称为

矩阵乘法(乘积)


在矩阵的乘积运算中,对应维度的元素个数要保持一致。

感知机(朴素神经元)

数学公式

感知机作为神经网络(深度学习)的起源的算法,也被称为“人工神经元”或“朴素感知机”。


感知机的多个输入信号都有各自固有的权重,这些权重发挥着控制各个 信号的重要性的作用。也就是说,权重越大,对应该权重的信号的重要性就 越高。


实现

导入权重和偏置概念,并通过numpy数组改造上述算法。

感知机的与门、非门和或门

通过与门、非门和或门实现异或门

输出:

激活函数

上面这段公式是带有偏置和权重的感知机数学公式,b称为偏置,用于控制神经元被激活的容易程度;w1和w2成为各个输入信号的权重,用于控制各个信号的重要性。下图是被明确表示了偏置b地位的网络图。


接下来引入新的函数y=h(x),表达式将被改写成:

输入信号的总和会被函数h(x)转换,这个h(x)函数一般就被称为激活函数,其作用在于决定如何来激活输入信号的总和。下图是被明确表示了激活函数计算过程的网络图。


激活函数是连接感知机和神经网络的桥梁。

阶跃函数和sigmoid函数

感知机通常使用阶跃函数作为激活函数,而sigmoid函数是神经网络经常使用的函数。

感知机一词,并没有严格同意它所指的算法,一般“朴素感知机”是指单层网络,指的是激活函数使用了阶跃函数的模型。“多层感知机”是指神经网络,即使用sigmoid函数等平滑的激活函数的多层网络。

  • 平滑性不同。sigmoid是依靠平滑的曲线,输出随着输入发生连续性变化;而阶跃函数以0为界,输出发生急剧性变化。

  • 输出的二元性。阶跃函数只能返回0或者1,输出的是二元信号,而神经元中流动的是连续的实数值信号。

如果把这两个函数与水联系起来,则阶跃函数可以比作“竹筒敲石”A, sigmoid 函数可以比作“水车”。阶跃函数就像竹筒敲石一样,只做是否传送 水(0 或 1)两个动作,而 sigmoid 函数就像水车一样,根据流过来的水量相应 地调整传送出去的水量。

他们俩的共同特征是宏观形状相似,且均为非线性函数。通常的,神经网络的激活函数必须使用非线性函数,否则加深神经网络的层数就毫无意义了。


阶跃函数的实现

当输入超过0时,输出1,否则输出0

通过使用numPy广播的技巧,阶跃函数的代码实现如下。

sigmoid函数的实现

代码实现

ReLU函数

目前为止,介绍了两种激活函数(阶跃函数和sigmoid函数)。在神经网络发展史上,sigmoid函数很早就开始被使用了,而近几年则主要使用ReLU(Rectified Linear Unit)函数。

ReLU函数在输入大于0时,直接输出该值;在输入小于等于0时,输出0.

ReLU函数的数学表达式:

ReLU函数的图形:


ReLU函数的代码实现:

前向传播(forward propagation)

  • 输入层(2个神经元)

  • 第1个隐藏层(3个神经元)

  • 第2个隐藏层(2个神经元)

  • 输出层(2个神经元)


从输入层到第1隐藏层的信号传递


从第1隐藏层到第2隐藏层的信号传递


从第2隐藏层到输出层的信号传递

这里,输出层的激活函数使用了恒等函数,也就是上一隐藏层直接传递给输出层。

一般输出层用到的激活函数,根据求解问题的性质决定。一般地,回归问题可以使用恒等函数,二元分类问题可以使用sigmoid函数,多元分类问题可以使用softmax函数。

完整代码

输出层的设计

一般的,回归问题用恒等函数,分类问题用softmax函数。

分类问题是指数据属于哪一个类别的问题,比如区分图像中的人是男性还是女性。

回归问题是根据某个输入预测一个(连续的数值)的问题。比如,根据一个人的图像预测这个人的体重的问题(类似“57.4kg”这样的预测)。

softmax函数


softmax函数有一个特征,就是它的输出是0.0到1.0之间的实数。并且函数的输出值的总和是1。因此softmax函数的输出还可以解释为“概率”。

一般而言,神经网络只是把输出值最大的神经元所对应的类别作为识别结果。且即使使用了softmax函数,输出值最大的神经元的位置也不会变。

因此,神经网络在进行分类问题时,输出层的softmax函数可以省略。

求解机器学习问题的步骤分为学习推理两个阶段。推理阶段一般会省略输出层的softmax函数。在输出层使用softmax函数是因为它和神经网络的学习有关。

输出层的神经元数量

输出层的神经元数量根据待解决的问题来决定。对于分类问题,其数量一般设定为类别的数量。比如手写数字识别,需要预测图中的数字是0-9中的哪一个的问题,将输出层的神经元设定为10个。


激活函数与前向传播----「深度学习#1」的评论 (共 条)

分享到微博请遵守国家法律