深度学习1:神经网络基础&前馈神经网络Feedforward Neural Network(基于Python MXNet.Gluon框架)

神经网络背景

  人工神经网络与生物神经元类似,由多个节点(人工神经元)互相连接而成,可以用来对数据之间的复杂关系进行建模。不同节点之间的连接被赋予了不同的权重,每个权重代表了一个节点对另一个节点的影响大小。每个节点代表一种特定函数,来自其他节点的信息经过其相应的权重综合计算,输入到一个激活函数中并得到一个新的活性值(兴奋或抑制)。
  从系统观点看,人工神经元网络是由大量神经元通过极其丰富和完善的连接而构成的自适应非线性动态系统
  虽然我们可以比较容易地构造一个人工神经网络,但是如何让人工神经网络具有学习能力并不是一件容易的事情。早期的神经网络模型并不具备学习能力。

  • 首个可学习的人工神经网络是赫布网络,采用一种基于赫布规则的无监督学习方法。
  • 感知器最早的具有机器学习思想的神经网络,但其学习方法无法扩展到多层的神经网络上
  • 直到 1980 年左右,反向传播算法才有效地解决了多层神经网络的学习问题,并成为最为流行的神经网络学习算法。

  人工神经网络诞生之初并不是用来解决机器学习问题。由于人工神经网络可以看作是一个通用的函数逼近器,一个两层的神经网络可以逼近任意的函数, 因此人工神经网络可以看作是一个可学习的函数,并应用到机器学习中。理论上,只要有足够的训练数据和神经元数量,人工神经网络就可以学到很多复杂的函数。我们可以把一个人工神经网络塑造复杂函数的能力称为网络容量(Net-work Capacity),与可以被储存在网络中的信息的复杂度以及数量相关1

常用的深度学习框架

(1)Caffe:由加州大学伯克利分校开发的针对卷积神经网络的计算框架,主要用于计算机视觉。Caffe用C++和Python实现,但可以通过配置文件来实现所要的网络结构,不需要编码。
(2)TensorFlow:由 Google 公司开发的深度学习框架,可以在任意具备 CPU 或者 GPU 的设备上运行。TensorFlow 的计算过程使用数据流图来表示。TensorFlow 的名字来源于其计算过程中的操作对象为多维数组,即张量(Tensor)。TensorFlow 1.0 版本采用静态计算图,2.0 版本之后也支持动态计算图。
(3)PyTorch:由 Facebook、NVIDIA、Twitter 等公司开发维护的深度学习框架,其前身为Lua语言的Torch。PyTorch也是基于动态计算图的框架,在需要动态改变神经网络结构的任务中有着明显的优势。
(4)MXNet:由亚马逊、华盛顿大学和卡内基梅隆大学等开发维护的深度学习框架。MXNet支持混合使用符号和命令式编程来最大化效率和生产率,并可以有效地扩展到多个 GPU 和多台机器。
  本文使用的正是MXNet/Gluon框架。

作为深度学习的基础,首先来了解一下机器学习的主要内容。

机器学习的三个基本要素

模型

  假设空间 F \mathcal{F} F 通常为一个参数化的函数族

F = { f ( x ; θ ) ∣ θ ∈ R D } \mathcal{F}=\{f(x;\theta)|\theta \in \mathbb{R}^D\} F={ f(x;θ)θRD}

其中 f ( x ; θ ) f(x;\theta) f(x;θ) 是参数为 θ \theta θ 的函数,也称为模型(Model),D为参数的数量。
  然后通过观测假设空间在训练集 D \mathcal{D} D 上的特性,从中选择出一个理想的假设(模型) f ∗ ∈ F f^* \in \mathcal{F} fF
  常见的模型可以分为线性和非线性两种。神经网络作为一类非线性的机器学习模型,可以更好地实现输入和输出之间的映射。

学习准则

  一个好的模型 f ( x , θ ∗ ) f(\textbf{x},\theta^*) f(x,θ) 应该在所有 ( x , y ) (\textbf{x},y) (x,y) 的可能取值上都与真实映射函数一致,或与真实条件概率分布一致。
  模型 f ( x , θ ) f(\textbf{x},\theta) f(x,θ) 的好坏可以通过期望风险(Expected Risk) R ( θ ) \mathcal{R}(\theta) R(θ) 来衡量,其定义为

R ( θ ) = E ( x , y ) ∼ p r ( y ∣ x ) [ L ( y , f ( x ; θ ) ) ] \mathcal{R}(\theta)=\mathbb{E}_{(\textbf{x},y) \sim p_r(y|\textbf{x})}[\mathcal{L}(y,f(\textbf{x};\theta))] R(θ)=E(x,y)pr(yx)[L(y,f(x;θ))]

其中 p r ( y ∣ x ) p_r(y|\textbf{x}) pr(yx) 为真实的数据分布, L ( y , f ( x ; θ ) ) \mathcal{L}(y,f(\textbf{x};\theta)) L(y,f(x;θ))损失函数,用来量化两个变量之间的差异。

损失函数
0-1损失函数 0-1 Loss Function

L ( y , f ( x ; θ ) ) = { 0 if  y = f ( x ; θ ) 1 if  y ≠ f ( x ; θ ) = I ( y ≠ f ( x ; θ ) ) \mathcal{L}(y,f(\textbf{x};\theta))= \begin{cases} 0 & \text{if } y = f(\textbf{x};\theta) \\ 1 & \text{if } y \neq f(\textbf{x};\theta) \end{cases} = I(y \neq f(\textbf{x};\theta)) L(y,f(x;θ))={ 01if y=f(x;θ)if y=f(x;θ)=I(y=f(x;θ))

  虽然0-1损失函数能够客观地评价模型的好坏,但其缺点是数学性质不是很好:不连续且导数为0,难以优化,因此经常用连续可微的损失函数替代。

平方损失函数 Quadratic Loss Function

L ( y , f ( x ; θ ) ) = 1 2 ( y − f ( x ; θ ) ) 2 \mathcal{L}(y,f(\textbf{x};\theta))= \frac{1}{2}(y - f(\textbf{x};\theta))^2 L(y,f(x;θ))=21(yf(x;θ))2
  常用于预测标签y为实数值的任务中(回归问题),不适用于分类问题。

交叉熵损失函数 Cross-Entropy Loss Function

  假设样本标签 y ∈ { 1 , 2 , … , C } y\in \{1,2,\dots,C\} y{ 1,2,,C} 为离散类别,模型 f ( x ; θ ) ∈ [ 0 , 1 ] C f(\textbf{x};\theta) \in [0,1]^C f(x;θ)[0,1]C的输出为类别标签的条件概率分布(基于训练集样本自变量,样本因变量/标签取到第c类的条件概率),即
p ( y = c ∣ x ; θ ) = f c ( x ; θ ) p(y=c|\textbf{x};\theta)=f_c(\textbf{x};\theta) p(y=cx;θ)=fc(x;θ)
其中 f ( x ; θ ) f(\textbf{x};\theta) f(x;θ) 是一个C维向量,满足:

  1. f c ( x ; θ ) ∈ [ 0 , 1 ] f_c(\textbf{x};\theta) \in [0,1] fc(x;θ)[0,1] f ( x ; θ ) f(\textbf{x};\theta) f(x;θ) 的第c维元素取值在[0,1]之间;
  2. ∑ c = 1 C f c ( x ; θ ) = 1 \sum_{c=1}^C f_c(\textbf{x};\theta) =1 c=1Cfc(x;θ)=1

  我们可以用一个C维的one-hot向量(独热编码) y \textbf{y} y 来表示样本标签 —— 假设样本的标签为 k ∈ { 1 , 2 , … , C } k\in \{1,2,\dots,C\} k{ 1,2,,C} ,那么标签向量 y \textbf{y} y 只有第k维的值为1,其余维度的元素都为0。
  对于训练集中的一个样本,标签的真实分布 y \textbf{y} y 和模型预测分布 f ( x ; θ ) f(\textbf{x};\theta) f(x;θ) 之间的交叉熵定义为

L ( y , f ( x ; θ ) ) =   y T l o g f ( x ; θ ) = − ∑ c = 1 C y c   l o g f c ( x ; θ ) = − l o g f y ( x ; θ ) \begin{aligned} \mathcal{L}(\textbf{y},f(\textbf{x};\theta)) = & \ \textbf{y}^Tlog f(\textbf{x};\theta) \\ = &-\sum_{c=1}^C y_c \ log f_c(\textbf{x};\theta) \\ = &-log f_y(\textbf{x};\theta) \end{aligned} L(y,f(x;θ))=== yTlogf(x;θ)c=1Cyc logfc(x;θ)logfy(x;θ)

其中 y c y_c yc 为标签向量第c维的元素值, f c ( x ; θ ) f_c(\textbf{x};\theta) fc(x

  • 20
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值