DL roam

来自Jack's Lab
2018年7月3日 (二) 16:16Hyl (讨论 | 贡献)的版本

跳转到: 导航, 搜索

目录

1 接触 Deep Learning

Jack 给我普及Deep learning已经是一两年前的事情了. 作为酒桌的谈资,自然是没往心里去. 直到我最爱的几个youtube频道相继开始聊起Deep learning的话题,才想起来探个究竟.

  • 3Blue1Brown on youtube [1]

2 直观印象

无论是jack给的连接还是youtube频道3Blue1Brown, 都是用下面这个例子来作为介绍deep learning.

直接跳到这个神经元结构示意图, 是下面的这个样子.

Deep learning hw fnn.png


什么意思呢, 就是假设每个手写数字都是28x28个像素的小图片, 总共784个点, 每个点的像素值按照一行行配列好,变成一个输入数组对应 input layer的784个神经元, 非常的直接和暴力.

神经元有四层, 中间两层称作 hidden layer.

最右边是输出层, 对应0到9 10个数字. 如果已经训练好了, 一个手写的'3'的图片,在输出层将会得到 3这个神经元的值最接近1(最大可能性), 其他神经元,理想状态, 可能性最接近0 (或-1).

而且,有一个事情必须提到,每个神经元有一个可能性的度量值, 从[-1, +1],或者从[0,1], 一层层传递下去,构成正向反馈.


好了, 一共有四层, 算是'深了', 所以叫 'deep learning', 而层数很少的呢叫 'shallow learning'.

每一层的每一个结点都全链接到下一层的所有神经元, 同样,靠右的神经元也全链接到上一层的所有神经元, 这样的结构叫 "FNN" 全链接神经网络.


那下一层的神经元怎么得到自己的 '可能性' 值, 有两个步骤. 第一步,线性影射值, Zl = wl-11al-11 1 + wl-12*al-12 + ... + b

这个式子的意思是有好几个:

  • 每个神经元都被上一层的神经元以某种权重激活 (activation). 权重值是w (weight)
  • 上一层的一个神经元, 贡献给下一层的某个神经元的线性值"z"(小写代表某一个神经元), 用z=a*w计算.
  • Z 是所有上一层的神经元对这层的一个神经元贡献的和, 加上一个bias值 (b)
  • 第一层的激活直接从数据, 这里是784个像素的值获得.


第二步是, 根据Z计算神经元的 "可能性" 值, Z可能是任何值, 但是可能性的值, 一般是[0,1] (或者[-1,1]), 这个步骤是非线性的, 也是最重要的, 神经元必须有非线性过程. 这个函数应该能把任意实数值影射到0-1这个区间( 或者 [-1,1]). 这样的函数有很多,最常见的是 σ

00.jpg


所谓训练神经网络,就是找到每一层每一个神经元里所有wi和b 的最合适的值.

3 最小值

先从识别一个数字来说,比如"2", 上述神经元可以认为是一个复杂的函数, 用一个手写体28x28的"2"的图片作为输入(x), 输出a是此图片可能是2的可能性. 输入一个"2"的图片,当然希望输出是y(x)=[1] (一维向量), 期望值用y(x)来表示(这里有点反人类, 为毛不用y(x)作为神经网路输出值). 而神经网络输出值可以用a表示. 这里y(x)就是1, 写作y(x)方便扩展.


希望 "2" 作为输入, [1,]作为输出, 如果不是这个情况呢, 比如输出了 0.1, 那么就需要说明下我们和期望值的'距离', 一般用:

C(w,b)= |y(x)-a|2

而C(w,b)定义了我们距离我们期望值的"距离"或者说"价格" 也或者说 "损耗". 总之, 是希望通过调整w,b这些参数, 得到一个神经网络的输出,使得C(w,b)这个Cost函数, 取值最小,也就是得到了最好结果.

(直接相减行不? 应该是不行的. C(w,b)是一个函数, 如果这个函数在所有图片"2"为输入的值域上, C(w,b)可能是一条直线, 哪里是最好值, 好像没法子定义好. 而二次方程图像是一个抛物线, 有一个底, 有一个最小值)


Dl-grident-decendent.png


现在,我们考虑,我们要同时识别手写"2"和"3". 结果是期望值现在是一个二维向量了, "2" 期望值是 [1,0], "3":期望值是 [0, 1]. 神奇的是, 数学, 用向量来表示"2", "3"的期望值时, 有几个令人敬畏的性质.

首先, 向量里的每个值互相都是正交的, 也可以说是二维空间的, 大概可以这样说, 学习 "2" 和学习"3" 现在可以独立互不影响的展开了. 其次, 如果输入是"2"的图片, 你肯定希望向量对应3的可能性是0, 而输入图片"3",向量对应2的部分是0. 这对应了输出向量的"方向",很神奇的是, Cost取最小值的时候, 这个条件也是满足的.

二维情况下, Cost函数, 如果走了狗屎运,可能是这个样子:

Dl-good-cost.png

很明显, 如果Cost是这个样子的, 我们应该能找到, w,b的组合, 让我们走到谷底.


想一下, 一个点在这个二维曲面上的意义是什么. 一个点, 代表某个图片通过一组 w,b的值被影射到的位置. 调整神经网络的w,b, 这个影射点的位置将会改变, 我们希望所有"2"的输出都在底部,其输出值在2的维度(x)上投影最大, 所有"3"的输出也都在底部, 很幸运, 二维空间容许我们 "3"的输出也在底部 其输出值在3的维度上投影最大(y). 二维空间容许"2" "3"有"相当旷阔"的独立性,在w,b调整中可能可以实现把"2","3"的影射值放到这个曲面的底部,即, cost最小. 这段,几乎就是在想象,向量代表的多维度空间是什么意思. (不要相信我)


还有一个问题, 就是所有的输入图片可能不能都是"最佳", 那么, 最好其平均值最好. 所以cost函数实际上是:

Deep-learnign-full-cost-mean-squeare.jpg


这个函数可以看作是以w,b的组合作为变量的函数 (而不是那些"图片"), 学习就是通过调整w,b,找到这个函数的最小值.

4 卷积

5 参考资料

个人工具
名字空间

变换
操作
导航
工具箱