文章目录
1 学习资源参考及个人评价
神经网络简介:
非常简单,会粗略讲一些名词概念、网络结构、模型的运行流程。
机器学习-实现简单神经网络:
只看了理论基础,感觉还好,但是个人感觉没有 西瓜书+南瓜书 讲的清楚吧。主要是对 感知器 和 适应性的线性神经元 做了区分。没有跟着它一起码代码,看见评论区说代码错误有点多。
深度学习之神经网络入门最佳路径:
挺好的,了解了一下网络结构相关的,并利用CIFAR10的数据集实战,通过搭建了简单单个神经元网络及多个分别实现二分类和多分类。其中,还了解了一些tensorflow的搭建,写法流程等。
西瓜书+南瓜书:主要看了5.1&5.2,了解了感知机网络结构和学习算法,为后面多层网络的进阶学习打下了基础。
李航的统计学习方法
浅析感知机(一)–模型与学习策略
本篇博客旨在记录自己的学习轨迹,若有错误,希望希望各位看官批评指正,共同进步。
2 要解决的疑惑
- 神经元的网络结构
- 什么是激活函数?为什么需要?
- 什么是损失函数?为什么需要?
- 什么是梯度下降?为什么需要?
- 什么是感知机与逻辑斯蒂回归?两者有什么区别?
3 M-P神经元模型
NN实际上是一个仿生学的产物,它模仿了生物学神经网络的结构功能,从而抽象成了最经典的最简单的M-P神经元模型。
它收到来自n个其他神经元传递过来的输入信号,通过带权重的连接进行传递。
然后,神经元接收到的总输入值(求和)与其阈值进行比较,最后通过一个函数(图中为f)处理来产生神经元的输出。
说到这里,就顺便结合图解释一下名词变量:
- w:连接权重
- x:输入的值,即问题中具体抽取出来的特征
- θ {\theta} θ:偏置,阈值
- f(*):激活函数
这里,为什么需要激活函数呢?
=》激活函数是用来处理产生神经元的输出的,提供规模化的非线性化能力,即将线性组合变成非线性的结果。
4 感知机 与 逻辑斯蒂回归
因此,感知机模型与逻辑斯蒂回归模型本质上是对使用的激活函数的区分。
这里补上逻辑斯蒂回归模型使用的函数:
s
i
g
m
o
i
d
(
x
)
=
1
1
+
e
−
x
{sigmoid(x)=\frac{1}{1+e^{-x}}}
sigmoid(x)=1+e−x1
感知机的阶跃函数显然具有不连续、不光滑的特点,所以通常用sigmoid函数作为激活函数。
而sigmoid函数可以把江大范围内变化的输入值挤压到0-1区间的输出值范围。
同时,sigmoid函数还有一个很好的性质:
f
′
(
x
)
=
f
(
x
)
(
1
−
f
(
x
)
)
{f^{'}(x)=f(x)(1-f(x))}
f′(x)=f(x)(1−f(x))
这个性质在后续的BP算法推导中占据很重要的地位。
5 两层神经元模型(无隐层)
5.1 网络结构
无论是感知机模型还是逻辑斯蒂回归模型,都能使用两层的神经元模型(一层为输入层,一层为输出层,且仅有输出层的神经元进行激活函数处理,即只拥有一层功能神经元)来进行描述:(以二输入的为例)
再观察,原始的激活函数处理公式:
y
=
f
(
∑
i
=
1
n
w
i
x
i
−
θ
)
{y=f(\sum_{i=1}^nw_ix_i-\theta)}
y=f(i=1∑nwixi−θ)
这里的阈值
θ
{\theta}
θ其实可以进一步处理,从而提高模型的泛化能力,即看成
−
1
∗
θ
{-1*\theta}
−1∗θ,这样
θ
{\theta}
θ可以作为一个新的输入,而其连接权重则固定为-1.如此,权重和阈值的学习可以统一为权重的学习。
5.2 参数调整
最终目的是得到一个好的泛化模型,即得到一组合适的权重参数,因此就需要根据每次的结果对当前的参数进行调整,从而得到最优。
那,如何评价最优呢?=》损失函数
如何求解损失函数的最优解?=》梯度下降
5.2.1 损失函数
根据南瓜书的相关推导并基于我们之前说的泛化模型,最终构造下面一个损失函数并简化为仅有权重参数:
min
w
L
(
w
)
=
min
w
∑
x
i
∈
M
(
y
^
i
−
y
i
)
w
T
x
i
{\min_w L(w) = \min_w \sum_{x_i \in M }(\hat{y}_i -y_i )w^T x_i}
wminL(w)=wminxi∈M∑(y^i−yi)wTxi
补:这里西瓜书和南瓜书中引入了一个“**线性超平面”**的概念。因此,可以知道后续为什么要引入多层网络(含隐层)了。
5.2.2 梯度下降
梯度下降通过调整参数来使得目标函数(损失函数)最小。
而普通的想法会有几个:
- 解方程,解出最小参数
- 参数太多
- 仅对当前数据集上有效
- 设置固定step模拟
- 容易错过最小值点
- step难以固定设置
- 类比“下山算法”
- 找到一个方向
- 适当的走一步
这里的梯度下降就是类比“下山算法”。
当然,从这个名字就可以看出,通过求梯度,以目标的负梯度方向对参数进行调整:(以感知机为例)
∇
w
L
(
w
)
=
∑
x
i
∈
M
(
y
^
i
−
y
i
)
x
i
{\nabla _wL(w)=\sum_{x_i \in M}(\hat{y}_i-y_i)x_i}
∇wL(w)=xi∈M∑(y^i−yi)xi
w
←
w
+
Δ
w
{w\leftarrow w+\Delta w }
w←w+Δw
Δ
w
=
−
η
(
y
^
i
−
y
i
)
x
i
{\Delta w = - \eta (\hat{y}_i-y_i)x_i}
Δw=−η(y^i−yi)xi
这里是采用随机梯度下降算法,极小化过程中不是一次使 M 中所有误分类点的
梯度下降,而是一次随机选取一个误分类点使其梯度下降。
其中,这里的
′
e
t
a
{'eta}
′eta是学习率,是可以人为设定的(当然这个设定肯定也有一定技巧,等后续自己熟练了再讲一讲):
6 基于简单逻辑回归模型的NN实现
这个是根据 深度学习之神经网络入门最佳路径 这门课程来进行学习的,跑了跑代码,理解了一下流程等。因为这个课程是免费,且可以跟着码代码,所以具体代码这里就不放了。
从二分类到多分类的简单实现,仅需要对网络结构的输出层的神经元个数进行相应的添加即可。同时,权重W从向量变成矩阵,同时输出的结果也从单个值变为向量格式。