笔者在很久以前就已经学习过UFLDL深度学习教程中的稀疏自编码器,近期需要用到的时候发现有些遗忘,温习了一遍之后决定在这里做一下笔记,本文不是对神经元与神经网络的介绍,而是笔者学习之后做的归纳和整理,打算分为几篇记录。详细教程请见UFLDL教程,看完教程之后再来看本文可能会更加清晰。
0. 本文中使用的符号一览及本文中的一些约定
符号 | 描述 |
---|---|
x | 输入值向量,为 |
xi | 第 i 个输入值 |
神经元激活函数,本文中为sigmoid函数,即 f(z)=11+e(−z) | |
W(l)ij | 神经网络中第
l
层第 |
第 l+1 层第 i 个神经元输入的偏置项 | |
神经网络的总层数 | |
Ll | 第
l
层,则输入层为 |
sl | 第 l 层的节点数(不包括偏置单元) |
第
l
层第 | |
z(l)i | 第
l
层第 |
hW,b(x) | 输入值为
x
,神经网络中权值和偏置项分别为 |
约定 本文中将函数
f()
以及偏导数
f′()
进行了针对向量参数的扩展,即:
f([z1,z2,z3])=[f(z1),f(z2),f(z3)]
f′([z1,z2,z3])=[f′(z1),f′(z2),f′(z3)]
1. 神经元
1.1 神经元定义
神经元是以
x
为输入,
1.2 激活函数
通常在神经元中输出值为0表示神经元被激活,输出为1表示神经元被抑制,而计算输出值所用的函数则被称为“激活函数”。本文中所用的激活函数为sigmoid函数:
f(z)=11+e(−z)
,其定义域为
(−∞,+∞)
,值域为
(0,1)
。以上图神经元为例,假设第
i
个输入值与神经元连线上的权重为
2. 神经网络
2.1 神经网络定义
神经网络就是将多个神经元连在一起,前一层神经元的输出就是后一层神经元的输入,下图是一个三层神经网络:
以上图为例,最左边一层为输入层,中间一层为隐藏层,最右边一层为输出层。
2.2 前向传播
前向传播就是使用输入值
x
通过神经网络计算出输出值
令
z(l)i
表示第
l
层第
z(l+1)i=W(l)i1x1+W(l)i2x2+W(l)i3x3+b(l)i
(这里其实是一个线性回归模型)
a(l)i=f(z(l)i)
hW,b(x)=a(3)1
2.3 前向传播的矩阵表示
本文中扩展了函数
f()
针对向量参数的约定,即有:
f([z1,z2,z3])=[f(z1),f(z2),f(z3)]
则上图神经网络中的前向传播过程可表示为:
z(2)=W(1)x+b(1)
a(2)=f(z(2))
z(3)=W(2)a(2)+b(2)
hW,b(x)=f(z(3))
下面以
z(2)=W(1)x+b(1)
为例,展开一下具体的矩阵表示,其他式子略:
⎛⎝⎜⎜⎜z(2)1z(2)2z(2)3⎞⎠⎟⎟⎟=⎛⎝⎜⎜⎜W(1)11W(1)21W(1)31W(1)12W(1)22W(1)32W(1)13W(1)23W(1)33⎞⎠⎟⎟⎟⎛⎝⎜x1x2x3⎞⎠⎟+⎛⎝⎜⎜⎜b(1)1b(1)2b(1)3⎞⎠⎟⎟⎟
最终,神经网络前向传播过程可表示为:
z(l+1)=W(l)a(l)+b(l)
a(l+1)=f(z(l+1))