深度前馈网络

摘要:
从本文开始,我将继续研究本书的第二部分,它将从第一部分介绍深度学习所需的基本知识,以构建深度网络,这是理论的应用和改进。深度前馈网络,也称为多层感知器或前馈神经网络,是一种典型的深度学习模型。这个模型是一个正向映射模型,它通过函数f从初始输入映射到结果y。模型的输出和模型本身没有反馈。总之,我们建立了一个非常简单的深度前馈网络。
  • 本文首发自公众号:RAIS,点击直接关注。

前言

本系列文章为《Deep Learning》读书笔记,可以参看原书一起阅读,效果更佳。从本文开始将继续学习本书的第二部分,将从第一部分介绍深度学习所需要的基础知识过渡到构建深度网络,是理论的应用与提高。

深度前馈网络

也叫 多层感知机 或者是 前馈神经网络,是典型的深度学习模型。这种模型是一种前向的映射模型,由最初的输入,经过函数 f 映射到结果 y,模型的输出和模型本身没有反馈(有反馈的称作循环神经网络)。这里网络的概念是一种有向无环图,最简单的是链式连接,输入的 x 经过 f1 再经过 f2 再经过 f3,最后的到结果 y。引入层的概念,如 f2 就是一层,f3 为输出层,训练数据给出了 x 和 y,却没有定义其中中间层的输入和输出,因此中间层也被称为隐藏层。

线性模型分为逻辑回归(分类问题)和线性回归(连续值预测问题),可以高效可靠的拟合,但问题是其能力距现在了线性函数范围内,无法理解输入变量间的相互作用,因此我们考虑将输入 x,先做非线性变换 φ(x),然后线性函数作用在 φ(x) 上。这里涉及到的问题是 φ(x) 如何选择:

  1. 通用的 φ,有足够高的维数,则可以将输入与输出很好的拟合,问题是泛化往往很不好。

  2. 手动设计 φ,专家去设计算法,手动编码 φ,问题是这是针对特定问题进行的算法设计,难以迁移。

  3. 去学习 φ,φ(x;θ) 将以 θ 为参数,进行训练,并且可以通过使用广泛的函数族或人为编码帮助泛化使之可以实现上述两种情况。

学习异或函数(XOR)

异或的含义为:x1 和 x2 相同为 0,不同为 1。我们设置代价函数为:

[J(θ)=frac{1}{4}sum_{x∈X}{(f^*(x)-f(x;θ))^2} \\ 其中:f(x;θ)=f(x;w,b)=x^Tw+b ]

解得:w=0,b=1/2,这显然是不对的,为什么会这样?x1=0 时,模型输出随着 x2 增大而增大,x1=1 时,模型输出随着 x2 增大而减小,这用线性模型怎么可能做得到,因此得到了错误的结果。

要解决这个问题,我们引入了一层隐藏层,构成前馈神经网络:

[h=f^1(x;W,c) \\ y=f^2(h;w,b) \\ ∴f(x;W,c,w,b)=f^2(f^1(x)) ]

前馈神经网络

这里我们需要考虑 h 应为怎样的函数,如果是线性函数,代入 y 得到的结果仍然为线性函数,前面的分析我们知道这无法满足需求,因此 h 需为非线性函数。这里使用激活函数,修正线性单元(RELU,Rectified Linear Unit):g(z)=max{0, z}。

RELU

则网络为:

[f(x;W,c,w,b)=w^Tmax\{0,W^Tx+c\}+b \\ 一组解为:W=left[ egin{matrix} 1&1\\ 1&1 end{matrix} ight] \\ c=left[egin{matrix}0\\-1end{matrix} ight] \\ w=left[egin{matrix}1\\-2end{matrix} ight] \\ b=0 \\ ]

则可以计算结果:

[X=left[ egin{matrix} 0&0\\ 0&1\\ 1&0\\ 1&1\\ end{matrix} ight] \\ y_1=XW+c^T=left[egin{matrix} 0&0\\ 1&1\\ 1&1\\ 2&2 end{matrix} ight]+c^T=left[egin{matrix} 0&-1\\ 1&0\\ 1&0\\ 2&1 end{matrix} ight] \\ y_2=max(0,y_1)=max(0,left[egin{matrix} 0&0\\ 1&0\\ 1&0\\ 2&1 end{matrix} ight]) \\ y=y_2w=left[egin{matrix} 0\\ 1\\ 1\\ 0 end{matrix} ight] ]

到这里,就完成异或函数的基于深度学习模型的构建。

总结

到这里,我们构建了一个非常简单的深度前馈网络。知道了网络模型,就是一种数学的映射或函数表达,没有类似于相同为 0 不同为 1 这样的判断,而都是一种矩阵的运算,这也是需要转换的一种思维。计算机是一种固化的数学,在这里体现的尤为明显。下一篇我们重新从新的角度讨论梯度学习。

  • 本文首发自公众号:RAIS,点击直接关注。

免责声明:文章转载自《深度前馈网络》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇参数传递 强制类型转换 自动类型转换 临时变量load()方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android 图片设置圆角 方法之二

Android中经常会遇到对图片进行二次处理,例如加圆角,或者显示圆形图片。接下来我们再介绍一种方法。 首先, 自定义ImageView: android:id="@+id/iv" android:layout_width="300dp" android:layout_height="300dp" android:layout_centerHorizont...

混淆矩阵(Confusion matrix)的原理及使用(scikit-learn 和 tensorflow)

原理   在机器学习中, 混淆矩阵是一个误差矩阵, 常用来可视化地评估监督学习算法的性能. 混淆矩阵大小为 (n_classes, n_classes) 的方阵, 其中 n_classes 表示类的数量. 这个矩阵的每一行表示真实类中的实例, 而每一列表示预测类中的实例 (Tensorflow 和 scikit-learn 采用的实现方式). 也可以是,...

图片的放大缩小

布局文件 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_par...

机器学习

概述 命名实体识别在NLP的应用中也是非常广泛的,尤其是是information extraction的领域。Named Entity Recognition(NER) 的应用中,最常用的一种算法模型是隐式马可夫模型(Hidden Markov Modelling)- HMM。本节内容主要是通过介绍HMM的原理,以及应用HMM来做一个NER的实例演示。 H...

android绘图—Paint path 旋转

http://meteor6789.blog.163.com/blog/static/35040733201111193535153/ Piant 看一段代码: mPaint = new Paint();mPaint.setAntiAlias(true);//锯齿mPaint.setDither(true);//mPaint.setColor(0xFF3...

python科学计算_numpy_线性代数/掩码数组/内存映射数组

1. 线性代数 numpy对于多维数组的运算在默认情况下并不使用矩阵运算,进行矩阵运算可以通过matrix对象或者矩阵函数来进行; matrix对象由matrix类创建,其四则运算都默认采用矩阵运算,和matlab十>分相似: a = np.matrix([[1,2,3],[4,5,6],[7,8,9]]) matrix([[1, 2, 3],[4,...