总框架及基本知识点参考: liu-yang-前馈神经网络
神经元模型
神经元(M-P)
参考:
[McCulloch-Pitts Neuron — Mankind’s First Mathematical Model Of A Biological Neuron](McCulloch-Pitts Neuron — Mankind’s First Mathematical Model Of A Biological Neuron | by Akshay L Chandra | Towards Data Science)
多个输入,进行线性组合( w ⋅ x w \cdot x w⋅x),加上一个偏置( − b -b −b),得到一个数 w ⋅ x + b w \cdot x + b w⋅x+b,通过激活函数 f f f,到达下一个神经元。
大致是这样的结构。
抽象到计算公式为:
f
(
∑
i
=
1
n
[
l
−
1
]
w
i
j
[
l
]
x
i
[
l
−
1
]
−
θ
j
[
l
]
)
,
j
=
1
,
2
,
⋯
n
[
l
]
f(\sum_{i=1}^{n^{[l-1]}} w_{ij}^{[l]} x_i^{[l-1]} - \theta_j^{[l]}), j = 1,2, \cdots n^{[l]}
f(i=1∑n[l−1]wij[l]xi[l−1]−θj[l]),j=1,2,⋯n[l]
关于权重
w
i
j
[
l
]
w_{ij}^{[l]}
wij[l]代表的是当前层到这一层的权重,
x
i
[
l
−
1
]
x_i^{[l-1]}
xi[l−1]代表上一层的输出,
θ
j
[
l
]
\theta_j^{[l]}
θj[l]代表的是这一层的偏置,函数
f
f
f是当前层所选择的激活函数。
大致是这样的,是从网上找的图片,地址[在这里](10807-27549-01.jpg (592×340) (eetrend.com))
网络结构
对神经元结构的抽象,并且对应的神经元的个数增加。
网络结构乃是上面多个具有交叉的模型所构成。
图片具体地址[在这里](2019-0486-2_mini.jpg (1575×824) (zafu.edu.cn)).
注意:第一层不算作层数,如上图所示,在指定 x [ l ] x^{[l]} x[l]时, l l l是 l = 0 , 1 , 2 , 3 l=0, 1, 2, 3 l=0,1,2,3,最后一层的层数一般指的是第三层,第一层 l = 0 l=0 l=0一般说作输入层。
感知器
单层感知器和多层感知器
单层感知器,在神经网络中,一般是指代只具有一个输入层和一个输出层的网络。其中网络抽象表达式为:
f
(
w
⋅
x
+
b
)
=
s
i
g
n
(
w
⋅
x
+
b
)
f(w\cdot x + b) = {\rm{sign} }(w \cdot x + b)
f(w⋅x+b)=sign(w⋅x+b)
其中
x
x
x可以是多维的
x
=
(
x
1
,
x
2
,
⋯
,
x
m
)
x = (x_1, x_2, \cdots, x_m)
x=(x1,x2,⋯,xm), 输出
y
y
y一般是一维的,激活函数为
s
i
g
n
\rm sign
sign, 是一个阶梯函数:
s
i
g
n
(
x
)
=
{
+
1
,
x
≥
0
−
1
,
x
<
0
{\rm sign}(x)=\left\{ \begin{aligned} +1, \quad x \ge 0 \\ -1, \quad x < 0\\ \end{aligned} \right.
sign(x)={+1,x≥0−1,x<0
图片来源在这里[在这里](v2-48f8a8034abe107a585556193be4c365_1200x500.jpg (731×248) (zhimg.com))
一、当在线性可分的时候,往往使用单层感知机模型就可以;
二、如果有某些点不可分的时候,可以实当放低对准确度的要求(即要求完全分开的要求),得到上图第二个分割平面;
三、如果还是不可分,即对应第三个图,1. 则需要使用类似于传统机器学习的SVM(使用非线性核将原始数据映射到高维空间中去),2. 在这里使用多层感知器,并且定义损失函数为非线性损失函数(后面会继续定义)来达到非线性可分的效果。
单层 VS 多层
原来只有一个sum求和,进行激活输出;
现在有多个sum求和,放到一个层中,再相互连接,传到下一层去。
想简单解释一下为什么要引入多层的神经网络。因为多层神经网络能够表示的计算更加强大。比如最简单的逻辑运算,AND, OR, NOT, 使用简单的一层神经元,即单个感知器就可以实现,因为他们往往只是涉及到一个判断,但是对于XOR感知器,需要进行两个判断,有两个输入x1, x2, 当且仅当x1, x2取值不相等的时候,它是线性不可分的,这里的取值不相等时需要使用一个分线性函数,即一个弯曲的曲线来将红色的点和绿色的点分开。
关于具体的神经网络,也作为一个TODO来完成吧。
图片来源:在这里
BP算法
BP算法的基本过程
向前传播,计算损失函数,计算损失函数关于参数的梯度,使用梯度下降法(动量法,自适应方法)来更新参数。
使用更新之后的参数继续往后传,继续前一步的过程,直到损失函数收敛,并且达到理想精度。
激活函数
常见的激活函数sigmoid, 阶梯函数,ReLU, tanh, Leaky Relu, Prelu, Selu
激活函数的分类:
1、linear function
linear function, identity function
2、Step function
sign function is a special case of this functions.
Thereshold step function
H
(
x
)
=
{
0
,
i
f
x
<
0
1
,
i
f
x
≥
0
H(x)=\left\{ \begin{aligned} 0, \quad {\rm if} \; x < 0 \\ 1, \quad {\rm if} \; x \ge 0\\ \end{aligned} \right.
H(x)={0,ifx<01,ifx≥0
Bipolar Step function
3、Hockey-stick functions
ReLU, prelu( α \alpha α, x)
PRelu:
P
R
e
L
U
(
α
,
x
)
=
{
α
x
,
i
f
x
<
0
x
,
i
f
x
≥
0
,
α
>
0.
PReLU(\alpha, x)=\left\{ \begin{aligned} \alpha x, \quad {\rm if} \; &x < 0 \\ x, \quad {\rm if} \; &x \ge 0, \qquad \alpha >0.\\ \end{aligned} \right.
PReLU(α,x)={αx,ifx,ifx<0x≥0,α>0.
ELU(Exponential Linear Units), SELU(Scaled Exponential Linear Units)
4、Sigmoid functions
TODO
5、Bumped-type functions
6、Classification functions
categorical_crossEntropy
TODO:介绍每个激活函数是怎么发展来的,即前面的有什么需要改进的地方。
BP算法示例
这个自己就不举例子了,可以举一个简单的例子,两层的网络,一个输入层,一个隐藏层,一个输出层,用作回归来进行分析。自己指定每一层的激活函数,以及最后一层的损失函数来进行分析。
优化问题
TODO:细化
难点:
- 可能面临非凸问题
- 损失函数不容易收敛
需求:
- 计算速度
- 计算资源
- 数据量的满足
非凸优化问题
- 如何解决非凸优化的问题
梯度消失问题
-
如何解决梯度消失的问题
可以从损失函数中着手
梯度爆炸问题
- 也从损失函数着手。