神经网络与深度学习课程总结(一)
神经网络与深度学习课程总结(一)
0 前言
在此之前,我从未接触过关于“神经网络和深度学习”实现方面的内容,所以写一个前言简单介绍一下
0.1 代码框架
- mxnet
- pytorch
- tensorflow
- paddle
- …
以前听人提起神经网络时,他们总是会附带着聊到这些名词,在接触到之后才知道,这些实际上就是搭建神经网络用的框架,当然也可以单纯地认为是函数库(刚学一周不知道理解得对不对)
以pytorch为例,里面就定义了很多关于张量的计算(至于什么是张量:一维张量叫向量,二维张量叫矩阵),有各种线性非线性网络的API。
0.2 名词解释
有关于学习的名词实在是太多了,什么“神经网络”、“机器学习”、“深度学习”、“强化学习”、“卷积神经网络”、“监督学习”等等等,这里做一个名词解释和分类(刚学一周,有些名词还是不懂,有些则是懵懵懂懂):
-
神经网络:似乎是指一种模型,一种框架,一种模式,但凡使用下图这种模式的算法,都可以叫做神经网络,在最基本的单层神经网络的基础上,发展出了很多变体,如:卷积神经网络,循环神经网络等等。神经网络由许多神经元组成,每个神经元都是一个节点,这个节点(其实就是一个函数)包含若干个输入和若干个输出

-
机器学习:就是各种学习算法的统称,所谓深度学习就是一种具体的机器学习算法,而这些算法的核心思想就是神经网络
-
学习过程:众所周知,机器学习算法工作模式可粗略分为两种,训练(根据数据集优化算法中的参数)和预测(利用优化好的参数,根据输入得到输出),其中预测过程很简单,就是我们用户和人工智能之间的交互的过程。但是训练过程就比较复杂,大致可以分为以下:
- 监督学习:给定数据集,其中数据集中包含“特征”(输入)和“标签”(输出),如分类问题和回归问题
- 无监督学习:给定数据集,其中数据集中包含“特征”,通常不包含“标签”,如聚类问题
- 强化学习:似乎没有常规意义下的数据集,它需要模拟模型与环境进行交互,根据模型作出的动作进行评分,从而调整模型中的参数,如决策问题
- 应该还有很多种过程,暂时没接触到,而在这些之下,又有离线学习和在线学习(顾名思义,离线学习就是把训练过程和预测过程分开进行,在线则相反)
0.3 基于神经网络的机器学习算法的整体思路
把要解决的问题建模成一个优化问题,然后求解。好像很多问题都是这种思路,区别在于,各自的目标函数和约束条件不一致导致选择的优化算法各有不同。
- 在机器人路径规划方面,目标函数和约束是有轨迹、环境和机器人动力学等等构成的,目标是轨迹平滑,安全可行;
- 在SLAM方面,目标函数和约束是由传感器和环境等等构成的,目标是各种估计的协方差尽可能小;
- 而对于机器学习算法,它的目标函数似乎并没有什么物理意义(正因如此才使它适用于各行各业),至于约束条件,似乎没有约束条件,就算有(防止梯度爆炸,而限制参数不能过大),也是看不出什么物理意义
所以,机器学习算法的思路就很明晰了,按优化问题走就可以:
-
建模:不管什么问题,都建模成神经网络模型,这种模型满足以下的特点:
- 单神经元模型:就是一个函数,有若干个输入和若干个输出
- 整体模型由各个神经元输入输出连接在一起
- 顶层神经元的输出就是模型的输出,底层神经元的输入就是模型的输入(参考上面那个图)
- 可以灵活选择节点函数,典型的函数是σ(WX)\sigma(WX)σ(WX),其中σ(x)\sigma(x)σ(x)是激活函数,WWW是模型参数,XXX是输入的特征
-
优化变量:模型参数就是优化变量,每一个节点都有一个参数张量,节点越多,参数张量越多,优化变量维度就越大
-
目标函数:每个研究领域都有属于该领域的专业术语,路径规划问题中,目标函数叫
cost function, 学习领域中,目标函数一般称为loss function- 对于监督学习,预测值(就是模型输出值)y^\hat{y}y^和标签值yyy之间的距离常作为目标函数的一部分(最小化距离)
- 对于强化学习,显然评分可以成为目标函数的一部分(最大化评分),但强化学习这种模式,输入是环境,输出是决策,例如马尔科夫决策问题,这就跟传统优化问题不太一样了(我愿称其为广义的优化问题,其优化算法就是模拟对局)
-
优化算法: 在学习领域最典型的优化算法是随机梯度下降法(跟普通的梯度下降不太一样,首先是随机,其次是对同一套参数有多个梯度,需要做梯度加权)
1 线性回归
以预测房价为例,根据房屋面积和房屋年限预测房价,此类问题被称为线性回归问题,求解该问题的步骤如下:
1.1 建模
单层神经网络便足够了,如下:

其中输入层不涉及计算,输出层节点的函数为:
y=hθ(x)=θ1⋅xarea+θ2⋅xage+θ0 y =h_{\theta}(x)= \theta_1 \cdot x_{area} + \theta_2 \cdot x_{age} + \theta_0 y=hθ(x)=θ1⋅xarea+θ2⋅xage+θ0
1.2 优化变量
优化变量为θ=[θ0,θ1,θ2]T\theta = [\theta_0, \theta_1, \theta_2]^Tθ=[θ0,θ1,θ2]T, 训练数据集的特征为x=[1,xarea,xage]Tx = [1, x_{area}, x_{age}]^Tx=[1,xarea,xage]T, 训练数据集的标签为y=ypricey = y_{price}y=yprice
1.3 目标函数
目标函数为:
J(θ)=12∑i=1m(y(i)−hθ(x(i)))2 J(\theta) = \frac{1}{2}\sum_{i=1}^{m}(y^{(i)}-h_{\theta}(x^{(i)}))^2 J(θ)=21i=1∑m(y(i)−hθ(x(i)))2
1.4 优化算法
随机梯度下降法:
θk+1=θk+ηm∑i=1m∇J \theta_{k+1} = \theta_{k} + \frac{\eta}{m}\sum_{i=1}^{m}\nabla J θk+1=θk+mηi=1∑m∇J
也可以直接求解析解
θ=(XTX)−1XT⋅y \theta = (X^TX)^{-1}X^T \cdot y θ=(XTX)−1XT⋅y
2 线性二分类
以好苹果分类为例,该类问题的输入为苹果的直径和外观评价,输出为是否为好苹果.这类问题与回归问题最大的区别在于分类问题的输出是有限的类别,在此做如下处理:
-
构造这个二分类的分界直线

-
一边是负值,一边是正值。越属于这类,值越大(正),反之越小(越负)
-
将输出变换到0~1之间,用概率表示类别,考虑使用sigmoid函数

此时,该二分类问题与回归问题除了输出层函数不同之外,其他步骤都一致,其中sigmoid常被成为激活函数
3 BP算法
在面对实际问题时,以上设计的单层神经网络模型往往难以精确描述问题,容易出现欠拟合现象.为应对这种现象,常常在输入与输出层之间加入几层隐藏层,在隐藏层和激活函数(是的,激活函数必不可少,要不然模型始终是线性的)的作用下,多层神经网络便能够拟合我们遇到的大部分问题,在这种情况下,应用随机梯度下降法进行优化过程中,梯度的计算就比较复杂,在实际应用中,一般使用反向传播法(backpropagation),实际就是链导法则,只不过是由输出到输入去计算并相乘.
在推导BP算法之前,有必要再引入几个名词:
- 前向传播:从输入到输出,计算神经网络中各层的结果
- 反向传播:从输出到输入计算目标函数关于该层输入的梯度,最后相乘便是输出关于优化变量的梯度
- 权值正则化:所谓正则化,就是把权值系数的平方和作为软约束添加到目标函数中,防止系数过大
- 计算图:如下所示,J为目标函数,X为特征输入,y为标签,o为输出

BP法的目标便是计算J关于W(1)W^{(1)}W(1)和W(2)W^{(2)}W(2)的导数
- 目标函数关于损失项和正则化项的导数
∂J∂s=1,∂J∂L=1 \frac{\partial J}{\partial s} = 1, \frac{\partial J}{\partial L} = 1 ∂s∂J=1,∂L∂J=1
- 目标函数关于输出的梯度
∂J∂o=∂L∂o=o−y \frac{\partial J}{\partial o}=\frac{\partial L}{\partial o} = o-y ∂o∂J=∂o∂L=o−y
- 目标函数关于W(2)W^{(2)}W(2)的梯度
∂J∂W(2)=∂L∂W(2)+∂s∂W(2)=∂L∂ohT+λW(2) \frac{\partial J}{\partial W^{(2)}}=\frac{\partial L}{\partial W^{(2)}} + \frac{\partial s}{\partial W^{(2)}} = \frac{\partial L}{\partial o}h^T + \lambda W^{(2)} ∂W(2)∂J=∂W(2)∂L+∂W(2)∂s=∂o∂LhT+λW(2)
- 目标函数关于hhh的梯度
∂J∂h=∂L∂h=W(2)T∂L∂o \frac{\partial J}{\partial h}=\frac{\partial L}{\partial h} = W^{(2)^T}\frac{\partial L}{\partial o} ∂h∂J=∂h∂L=W(2)T∂o∂L
- 目标函数关于zzz的梯度
∂J∂z=∂L∂z=∂L∂hϕ′(z) \frac{\partial J}{\partial z}=\frac{\partial L}{\partial z} =\frac{\partial L}{\partial h}\phi^{'}(z) ∂z∂J=∂z∂L=∂h∂Lϕ′(z)
- 目标函数关于W(1)W^{(1)}W(1)的梯度
∂J∂W(1)=∂L∂W(1)+∂s∂W(1)=∂L∂zxT+λW(1) \frac{\partial J}{\partial W^{(1)}}=\frac{\partial L}{\partial W^{(1)}} + \frac{\partial s}{\partial W^{(1)}} = \frac{\partial L}{\partial z}x^T + \lambda W^{(1)} ∂W(1)∂J=∂W(1)∂L+∂W(1)∂s=∂z∂LxT+λW(1)
其中ϕ\phiϕ为激活函数,λ\lambdaλ为正则项系数
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)