神经网络和BP算法推导
Posted 爆浆大鸡排
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络和BP算法推导相关的知识,希望对你有一定的参考价值。
我的原文:https://www.hijerry.cn/p/53364.html
感知机
感知机(perceptron)于1957年由Rosenblatt提出,是一种二分类线性模型。感知机以样本特征向量作为输入,输出为预测类别,取正、负两类。感知机最终学习到的是将输入空间(特征空间)划分为正、负两类的分离超平面,属于判别模型。为此,使用误分类作为损失函数,利用梯度下降优化该函数,可求得感知机模型。感知机是神经网络与支持向量机的基础。
单层感知机
第 i i i 个样本的预测值 y i ^ = f ( w ⃗ ⋅ x i ⃗ + b ) \\haty_i = f(\\vecw \\cdot \\vecx_i + b) yi^=f(w⋅xi+b) ,其中 f ( ⋅ ) f(\\cdot) f(⋅) 称为激活函数,$ f(\\cdot) \\in -1, 1$ ,损失为 L i = 1 2 ( y i ^ − y i ) 2 L_i=\\frac12(\\haty_i-y_i)^2 Li=21(yi^−yi)2 。单层感知机的目的就是习得合适的 w ⃗ \\vecw w 与 b b b ,使得所有样本的损失之和 ∑ x i ∈ X L i \\sum_x_i \\in X L_i ∑xi∈XLi 最小。
如果我们令 z = w ⃗ ⋅ x i ⃗ + b z = \\vecw \\cdot \\vecx_i + b z=w⋅xi+b 即感知机的输入。那么当 z < 0 z < 0 z<0 时, f ( z ) = − 1 f(z) = -1 f(z)=−1;当$ z > 0$ 时, f ( z ) = 1 f(z)=1 f(z)=1 。因为 z z z 是 x x x 线性组合,所以最终得到的是一个超平面 w ⃗ ⋅ x ⃗ + b = 0 \\vecw \\cdot \\vecx+b=0 w⋅x+b=0 ,超平面将输入样本分为了 y i = 1 y_i=1 yi=1 和 y i = y_i= yi= -1两类。
当输入 x = ( x 1 , x 2 ) x=(x_1, x_2) x=(x1,x2) 是二维向量时,用红点表示 + 1 +1 +1 的数据,黑点表示 − 1 -1 −1 的数据,最终习得的是一条直线,将两个数据分离开,如下图所示。
因为单层感知机最终习得是超平面,所以只能用于解决线性可分问题。对于下面这样的数据,单层感知机无能为力。
多层感知机
多层感知机也叫MLP,可以看做是一个有向图。MLP由多层节点组成,每一层全连接到下一层,除输入节点外,每个节点都是一个带有非线性激活函数的神经元(unit)。多层感知机可用于解决线性不可分问题。
因为神经网络的和多层感知器是一个意思,所以下面直接对单层前馈神经网络进行详细说明。
单层前馈神经网络
下图是一个输入层节点数为3,隐藏层节点数为2,输出层节点数为2的前馈神经网络,该网络可用于解决二分类问题。
单层前馈神经网络本质上是一个多层感知机,有以下几个特点:
- 全连接。每一层的节点都与右边层的所有节点通过
权重
连接。 - 隐藏层只有一层。所以称之为
单层
。 - 数据单向流动。每一层节点只作用于其之后的层,所以叫作
前馈
。 - 本质是数学函数。神经网络可以明确的用数学语言表达。
神经元
我们拿出隐藏层的一个神经元(unit)放大来看:
神经元的任务就是接受输入,产生输出
。
z
表示神经元的输入,a
是神经元的输出。
输入怎么得来?就是上一层的神经元输出与权重
的乘积之和再加上偏置
。
输出怎么得来?把输入值带入激活函数
得到。
写成数学表达式就是:
$ z^(2)_1 = w(1)_11a(1)_1+w(1)_21a(1)_2+w(1)_31a(1)_3+b^(1)_1$
a 1 ( 2 ) = f ( z 1 ( 2 ) ) a^(2)_1=f(z^(2)_1) a1(2)=f(z1(2))
f ( ⋅ ) f(\\cdot) f(⋅) 是激活函数,常见的有sigmoid、tanh、ReLU。
Sigmoid函数
Sigmoid的表达式为 S ( x ) = 1 1 + e − x S(x)=\\frac11+e^-x S(x)=1+e−x1,定义域为 R R R ,值域为 ( 0 , 1 ) (0, 1) (0,1)
在 x = 0 x=0 x=0 处,函数值为 1 2 \\frac12 21,其函数图像如下:
sigmoid函数有许多优美的性质,如:
-
是 e x e^x ex 的复合函数, e e e 又名
自然常数
-
1阶导函数
为 S ′ ( x ) = S ( x ) ( 1 − S ( x ) ) S'(x)=S(x)(1-S(x)) S′(x)=S(x)(1−S(x)) 。即函数在某一点的导数可由函数在这一点的函数值求得 -
曲线光滑,定义域内处处可导,且可以无限次求导
-
可以把任意输入压缩到 ( 0 , 1 ) (0, 1) (0,1) 范围内
在反向传播算法(BP算法)中,性质2、3起到了极大的作用,性质4起到了防溢出的作用。
前向传播原理
现考虑一个样本$ (x, y)$ ,其中
x
∈
R
3
x \\in R^3
x∈R3 是输入数据,
y
∈
[
0
,
1
]
,
[
1
,
0
]
y \\in \\[0,1],[1,0]\\
y∈[0,1],[1,0]是实际值。我们现在来手动计算
x
x
x 预测值
y
^
\\haty
y^。预测值
y
^
\\haty
y^ 的计算过程是从输入层开始从左往右计算
的,所以这个过程也叫作前向传播。
下图表示,为了得到 a 1 ( 3 ) a^(3)_1 a1(3) ,有哪些神经元被激活了。
为了方便表述,用 w i j ( l ) w^(l)_ij wij(l) 表示第 l l l 层的第 i i i 个神经元与第 l + 1 l+1 l+1 层的第 j j j 个神经元相连的权重,用 b j ( l ) b^(l)_j bj(l) 表示第 l + 1 l+1 l+1 层第 BP神经网络算法推导