1.神经网络的优势
神经网络相比传统机器学习算法有较大的优势,机器学习最要的过程是特征工程,传统机器学习是一整套的迭代和训练算法,通过定义loss function,然后最小化损失函数,从而得到一个近似的、比较好的模型。
若样本不是线性可分的,用线性的分类器预测效果较差。但是,我们没有办法提前预知,对特征做什么映射,能够很好的对原始样本可分。
神经网络根据最后的目标,帮你做了一些特征工程的工作。每一个神经元试着观察每个维度变量对最后的结果是否有效;多个神经元会将变量进行整合,根据对target的学习,整合出一整套特征组合方式。当完成特征工程之后,最后一层可看成一个简单的线性分类器(Softmax)。
2.从逻辑回归到神经网络
2.1 逻辑回归
逻辑回归可以理解成将空间中的点经过一系列几何变换求解损失函数而进行分类的过程,逻辑回归算法在该篇博客介绍过。
假如我们有两个输入
X
1
X_1
X1和
X
2
X_2
X2,首先我们会对输入进行线性组合。给一组权重
θ
0
\theta_0
θ0、
θ
1
\theta_1
θ1、
θ
2
\theta_2
θ2,其中
θ
0
\theta_0
θ0为偏移项(bias)。
z
=
θ
0
+
θ
1
X
1
+
θ
2
X
2
z=\theta_0+\theta_1X_1+\theta_2X_2
z=θ0+θ1X1+θ2X2
即,
z
z
z为向量
[
1
,
X
1
,
X
2
]
[1, X_1, X_2]
[1,X1,X2]和
[
θ
0
,
θ
1
,
θ
2
]
[\theta_0, \theta_1, \theta_2]
[θ0,θ1,θ2]的内积。此时,sigmoid函数恰好符合,将输入的样本转换成[0, 1]之间的概率,当线性函数
z
z
z作为sigmoid函数的自变量,并且
z
=
0
z = 0
z=0时,恰好为0-1分类的决策边界(Decision Binary)。所以,我们将
z
z
z代入sigmoid函数。
α
=
g
(
z
)
=
1
1
+
e
−
z
\alpha = g(z)= \frac{1}{1+e^{-z}}
α=g(z)=1+e−z1
sigmoid函数图像,如下图所示:
神经元[感知器]
将向量
[
1
,
X
1
,
X
2
]
[1, X_1, X_2]
[1,X1,X2]作为感知器的输入,向量
(
θ
1
,
θ
2
)
(\theta_1, \theta_2)
(θ1,θ2)叫做权重,常用
w
w
w表示;
θ
0
\theta_0
θ0叫做偏移,常用
b
b
b表示。二者做内积得到
z
z
z,然后将内积代入sigmoid函数,得到输出。本文为了兼容逻辑回归,只考虑sigmoid函数作为激励函数的情况
单层感知器/无隐层神经网络
神经网络以感知器为基础,进行多层逻辑回归的嵌套组合,我们可以对输入
(
X
1
,
X
2
)
(X_1, X_2)
(X1,X2)同时做
n
n
n个逻辑回归,产生
n
n
n个输出结果,这便是单层感知器或者叫无隐层神经网络。
单隐层神经网络
当对
n
n
n个逻辑回归的
n
n
n个输出再做
m
m
m个逻辑回归,即为单隐层神经网络:
深度神经网络
增加中间层=>深度神经网络(DNN)
最左边的叫做输入层,最后边的叫做输出层,两者之间的所有层叫做隐藏层;层数比较少的就是SNN(shallow nernal network)“浅层神经网络”;如果层数较多,就是传说中的DNN(Deep Neural Networks)“深度神经网络”。
3.双隐层神经网络彻底实现复杂分类
3.1传统分类情景
LR和linear SVM在线性可分的情况下,表现比较好
SVM在面对非线性可分时,需要研究者去构造feature,将feature映射到三维空间或四维空间,用平面或超平面将其分开。
理论上都可以进行feature mapping,然后用LR或SVM进行分类。但是,研究者并不知道什么样的feature才对分类结果有益。这时就需要有个算法,不需要研究者去做组合特征或非线性特征,而是算法本身能构造出合适的非线性特征,去完成分类任务。
3.2 神经网络完成“逻辑与”
神经网络通过连续做几次的几何变换,每次变换都是一些极简单的逻辑回归,最终达到线性可分。
现在试想一下,如何找出下图的分离边界呢?
通过研究可知,无论我们寻找一条怎样的直线,都不能将其分离,那么考虑采用两条直线取交集得到非线性分离边界,并且并不是唯一的解。因此,对同一个输入做多种不同的逻辑回归,再对这些结果取交集,就可以解决很大一部分非线性可分问题。
神经网络的“逻辑与”运算,通过逻辑回归选取合适的权重和偏移,就可以得到一个线性的分离边界。
由上图可得,当权重取
(
20
,
20
)
(20, 20)
(20,20),偏移取
−
30
-30
−30时,即可得到“逻辑与”效果。以上过程设计成神经网络,每层节点数分别为3、3、1,如下图:
上图中的隐藏层的第2,3节点作为输出层的部分输入,做交集就可得到一种结果。这些直线分割的“半平面”取交集都是**“凸域”——其边界的任意两点连线都在域内**。如下图各个色块,每个色块都是一个凸域。
3.3神经网络完成“逻辑或”
单个凸域的表现能力可能不是很强,无法构造一些非凸域的奇怪形状。若将颜色相同的凸域取并集,就得到了神经网络的“逻辑或”运算。
我们用以下这张图总结上面所说的内容:
则感知器可完成线性分割,单隐层神经网络可完成逻辑或,双隐层神经网络可完成逻辑与。
经过数据科学家的严格证明:双隐层神经网络能够解决任意复杂的分类问题。
3.4神经网络的输入和输出
神经网络的输入是单个样本的feature向量
输出取决于当前神经网络执行的任务。任务为回归问题,首先转化成分类问题(电影1-10分,先10分类,然后再对每个分类里,再进行回归/(或在细化成分类)),让回归的输出值尽可能接近真实值。
对于分类,输出为
m
m
m个概率值,待分类有m类,当前样本归属每个类的概率。
3.5神经网络的传递函数
双S函数的特点是当决策边界函数为0时,双S函数恰好过原点。
4. BP神经网络算法
BP神经网络算法,“正向传播”求损失,“反向传播”进行误差调优;以三层神经网络为例:
其中,d为真实值,O为输出值。
得到误差,如何调整权重让误差不断减小呢?采用随机梯度下降法修正每一层的权重,降低每一层的损失函数值。
随机梯度下降(SGD)计算:
随机梯度下降和梯度下降的区别在于:随机梯度下降调优样本是随机选取的部分样本,而梯度下降选取的全部样本进行调优。因为,神经网络的损失函数不是凸函数,所以,神经网络采用随机梯度下降法进行参数调优,使得在求解参数时,跳过局部最小值,避免陷入局部最优。
假如,上图代表了神经网路的损失函数,随机梯度下降如箭头2所示。
几个点:
1.在对数据进行归一化处理的过程,对训练集的归一化的系数应该用于测试集,也就是说数据的归一化,训练集和测试集不能用两种体系。
2.若输出层为Softmax分类器,则Softmax输出的是样本属于某类别的概率,和为1.
3.神经网络用于通常分类classification问题解决效果要比回归问题Regression好,所以解决回归问题通常转换为分类问题。
参考:
比较彻底介绍:https://blog.csdn.net/han_xiaoyang/article/details/50100367
学习笔记:https://clyyuanzi.gitbooks.io/julymlnotes/content/dl_nn.html
浅层神经网络:http://www.ai-start.com/dl2017/lesson1-week3.html#header-n404