机器学习简介(1)——神经网络


前言

随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

一、神经网络

1.神经网络(Neural Network)

1.1 什么是神经网络?

神经网络是一种数学模型,是存在于计算机的神经系统,由大量的神经元相连接并进行计算,在外界信息的基础上,改变内部的结构,常用来对输入和输出间复杂的关系进行建模。

在这里插入图片描述
上图就是一个神经网络系统,由多层构成。
输入层负责接收信息,比如一张猫的图片。
输出层是对输入信息的认知,比如它是不是猫。
隐藏层是对输入信息的加工处理。

1.2 神经网络是如何被训练的?

需要大量数据。比如要判断一张图片是不是猫。需要输入上千万张的带有标签的猫猫狗狗的图片,然后再训练上千万次。

1.3 如何学习的?

训练的结果有对的也有错的,如果是错误的结果,将被当做非常宝贵的经验,对比预测答案和真实答案之间的区别,然后把这个区别反向传递回去,对每个神经元向正确的方向进行改动。那么下一次训练通过这些改动的神经网络就可以提高准确。

1.4 如何训练,对信息的加工?

每个神经元都有属于自己的刺激函数,用这些函数给计算机一个刺激行为。

示例:在这里插入图片描述

第一次给计算机看猫的图片时,神经网络里只有部分的神经元被激活,被激活的神经元所传递的信息是计算机最为重视的信息(即对输出结果最有价值的信息)。如果预测的结果是狗,那么所有神经元的参数就会被调整,一些容易被激活的神经元会变得迟钝,另外一些神经元会变得敏感。这时被改动的参数就能渐渐预测出正确的答案。

2.卷积神经网络CNN(Convolution Neural Network)

2.1 什么是卷积神经网络?

把卷积神经网络这个词拆开来看。 “卷积”“神经网络”.。
以识别图片为例,卷积就是不再是对每个像素的输入信息做处理了,而是对图片上每一小块像素区域进行处理。
在这里插入图片描述

  1. 加强了图片信息的连续性。 使得神经网络能看到图形, 而非一个点.。
  2. 加深了神经网络对图片的理解。

具体来说, 卷积神经网络有一个批量过滤器, 持续不断的在图片上滚动收集图片里的信息,每一次收集的时候都只是收集一小块像素区域, 然后把收集来的信息进行整理, 这时候整理出来的信息有了一些实际上的呈现, 比如这时的神经网络能看到一些边缘的图片信息, 然后在以同样的步骤, 用类似的批量过滤器扫过产生的这些边缘信息, 神经网络从这些边缘信息里面总结出更高层的信息结构,比如说总结的边缘能够画出眼睛,鼻子等等。再经过一次过滤, 脸部的信息也从这些眼睛鼻子的信息中被总结出来。最后我们再把这些信息套入几层普通的全连接神经层进行分类, 这样就能得到输入的图片能被分为哪一类的结果了。

2.2 图片如何卷积?

在这里插入图片描述
在这里插入图片描述

上面是一张猫的图片, 图片有长, 宽, 高 三个参数。图片是有高度的! 这里的高指的是计算机用于产生颜色使用的信息。如果是黑白照片的话, 高的单位就只有1, 如果是彩色照片, 就可能有红绿蓝三种颜色的信息, 这时的高度为3。 以彩色照片为例子,过滤器就是影像中不断移动的东西, 他不断在图片收集小批小批的像素块, 收集完所有信息后, 输出的值, 我们可以理解成是一个高度更高,长和宽更小的”图片”。 这个图片里就能包含一些边缘信息, 然后以同样的步骤再进行多次卷积, 将图片的长宽再压缩, 高度再增加, 就有了对输入图片更深的理解。 将压缩,增高的信息嵌套在普通的分类神经层上,我们就能对这种图片进行分类了。

2.3 池化?

在这里插入图片描述

在每一次卷积的时候, 神经层可能会无意地丢失一些信息.。池化 (pooling) 就可以很好地解决这一问题.。

  1. 池化是一个筛选过滤的过程, 能将 layer 中有用的信息筛选出来, 给下一个层分析。
  2. 同时也减轻了神经网络的计算负担 (具体细节参考)。 也就是说在卷集的时候, 我们不压缩长宽, 尽量地保留更多信息, 压缩的工作就交给池化了,这样的一项附加工作能够很有效的提高准确性。

2.4 流行的CNN结构

在这里插入图片描述
比较流行的一种搭建结构,从下到上的顺序, 首先是输入的图片(image), 经过一层卷积层 (convolution), 然后在用池化(pooling)方式处理卷积的信息, 这里使用的是 max pooling 的方式.。然后在经过一次同样的处理, 把得到的第二次处理的信息传入两层全连接的神经层 (fully connected),这也是一般的两层神经网络层,最后在接上一个分类器(classifier)进行分类预测。

2.5 CNN的应用

在图像和语音识别方面能给出更优预测结果,也被应用在视频分析,自然语言处理,药物发现等等。

3.循环神经网络RNN(Recurrent Neural Network)

3.1 序列数据

在这里插入图片描述

现在有一组序列数据 data 0,1,2,3。在当预测 result0 的时候,我们基于的是 data0, 同样在预测其他数据的时候, 我们也都只单单基于单个的数据。 每次使用的神经网络都是同一个 NN。不过这些数据是有关联顺序的

比如:在厨房做菜, 酱料 A要比酱料 B 早放, 不然就串味了。

所以普通的神经网络结构并不能让 NN 了解这些数据之间的关联.

3.2 处理序列数据的神经网络

在这里插入图片描述

如何让数据间的关联也被 NN 加以分析呢? 想想我们是怎么分析各种事物的关联吧, 最基本的方式,就是记住之前发生的事情。
那我们让神经网络也具备这种记住之前发生的事的能力。再分析 Data0 的时候, 我们把分析结果存入记忆,然后当分析 data1的时候, NN会产生新的记忆, 但是新记忆和老记忆是没有联系的。我们就简单的把老记忆调用过来, 一起分析。
如果继续分析更多的有序数据 , RNN就会把之前的记忆都累积起来, 一起分析。

在这里插入图片描述
这次是以加入一些数学方面的东西。每次 RNN 运算完之后都会产生一个对于当前状态的描述,我们用简写 S( t) 代替, 然后这个 RNN开始分析 x(t+1) , 他会根据 x(t+1)产生s(t+1), 不过此时 y(t+1) 是由 s(t) 和 s(t+1) 共同创造的

3.3 RNN 的应用

RNN 的形式不单单这有这样一种, 它的结构形式很自由。

  1. 如果用于分类问题: 比如:说一个人说了一句话, 这句话带的感情色彩是积极的还是消极的. 那我们就可以用只有最后一个时间点输出判断结果的RNN.
  2. 图片描述 RNN:我们只需要一个 X 来代替输入的图片, 然后生成对图片描述的一段话。
  3. 语言翻译的 RNN:给出一段英文, 然后再翻译成中文。

有了这些不同形式的 RNN, RNN 就变得强大了。有很多有趣的 RNN 应用。

比如:

  1. 让 RNN 描述照片
  2. 让 RNN 写学术论文
  3. 让 RNN 写程序脚本
  4. 让 RNN 作曲

我们一般人甚至都不能分辨这到底是不是机器写出来的.

4.LSTM RNN循环神经网络(Long Short-Term Memory)

4.1 普通RNN的弊端

4.1.1 若系数W < 1:
神经网络学习时,系数W不断乘以误差,反向传递到t1时刻,误差可能会接近“0”,称这种问题为“梯度消失”或者“梯度弥散”。

在这里插入图片描述

4.1.2 若系数W > 1:
神经网络学习时,系数W不断乘以误差,反向传递到t1时刻,误差可能会“无穷大”,称这种问题为“梯度爆炸”。

在这里插入图片描述
这就是普通RNN没有办法回忆起久远记忆的原因。

4.2 LSTM

为解决普通RNN的弊端而提出的LSTM技术,称长短期记忆。与普通RNN相比,多出了三个控制器(输入、输出、忘记)。

在这里插入图片描述
多了一个 控制全局的记忆, 用粗线代替。
为了方便理解, 我们把粗线想象成电影或游戏当中的主线剧情,而原本的 RNN 体系就是 分线剧情。
三个控制器都是在原始的 RNN 体系上:
(1)先看输入方面 , 如果此时的分线剧情对于剧终结果十分重要, 输入控制就会将这个分线剧情按重要程度写入主线剧情进行分析;
(2)再看忘记方面, 如果此时的分线剧情更改了我们对之前剧情的想法, 那么忘记控制就会将之前的某些主线剧情忘记, 按比例替换成现在的新剧情。
所以主线剧情的更新就取决于输入和忘记控制
(3)最后的输出方面, 输出控制会基于目前的主线剧情和分线剧情判断要输出的到底是什么。
基于这些控制机制, LSTM 就像延缓记忆衰退的良药, 可以带来更好的结果。

5.自编码(Autoencoder)

5.1 什么是自编码

自编码是一种神经网络的形式。

5.2 压缩和解压

在这里插入图片描述
原来有时神经网络要接受大量的输入信息, 比如输入信息是高清图片时, 输入信息量可能达到上千万, 让神经网络直接从上千万个信息源中学习是一件很吃力的工作。所以, 何不压缩一下, 提取出原图片中的最具代表性的信息, 缩减输入信息量, 再把缩减过后的信息放进神经网络学习。 这样学习起来就简单轻松了。所以, 自编码就能在这时发挥作用。
通过将原数据白色的X压缩, 解压成黑色的X, 然后通过对比黑白X ,求出预测误差, 进行反向传递, 逐步提升自编码的准确性。
训练好的自编码中间这一部分就是能总结原数据的精髓, 可以看出, 从头到尾, 我们只用到了输入数据 X, 并没有用到 X 对应的数据标签, 所以也可以说自编码是一种非监督学习。
到了真正使用自编码的时候. 通常只会用到自编码前半部分。

5.3 编码器(Encode)

在这里插入图片描述
这部分也叫作 encoder 编码器。 编码器能得到原数据的精髓, 然后我们只需要再创建一个小的神经网络学习这个精髓的数据,不仅减少了神经网络的负担, 而且同样能达到很好的效果。

5.4 解码器(Decoder)

解码器在训练的时候是要将精髓信息解压成原始信息, 那么这就提供了一个解压器的作用, 甚至我们可以认为是一个生成器 (类似于GAN)。那做这件事的一种特殊自编码叫做 variational autoencoders, 你能在这里找到他的具体说明。

例子:模仿并生成手写数字.

在这里插入图片描述

6.生成对抗网络GAN(Generative Adversarial Nets)

6.1 常见神经网络形式

在这里插入图片描述

  1. 普通的前向传播神经网络
  2. 有分析图片的 CNN 卷积神经网络 ,
  3. 有分析序列化数据, 比如语音的 RNN 循环神经网络

以上神经网络都是输入数据得到想要的结果,能够很好的将数据与结果通过某种关系联系起来。

6.2 生成网络

在这里插入图片描述
还有另外一种形式的神经网络, 不是用来把数据对应上结果的, 而是用来”凭空”捏造结果, 这就是要说的生成网络。GAN就是其中的一种形式。那么GAN是怎么做到的呢?当然这里的”凭空”并不是什么都没有的空盒子, 而是一些随机数。就是用没有意义的随机数来生成有有意义的作品
比如:著名画作。这只是一个 GAN 的一部分而已, 这一部分的神经网络我们可以想象成是一个新手画家。
在这里插入图片描述在这里插入图片描述
画家作画画出来有可能是一团糟,这可怎么办, 聪明的新手画家找到了新手鉴赏家。可是新手鉴赏家也不知道如何鉴赏著名画作 , 所以坐在电脑旁边的你实在看不下去了, 拿起几个标签往屏幕上一甩 , 然后新手鉴赏家就被你这样一次次的甩来甩去着甩乖了, 慢慢也学会了怎么样区分著名画家的画了。重要的是, 新手鉴赏家和新手画家是好朋友, 他们总爱分享学习到的东西。
在这里插入图片描述
所以新手鉴赏家告诉新手画家, “你的画实在太丑了, 你看看人家达芬奇, 你也学学它呀, 比如这里要多加一点, 这里要画淡一点。” 就这样, 新手鉴赏家将他从你这里所学到的知识都分享给了新手画家, 让好朋友新手画家也能越画越像达芬奇。

这就是 GAN 的整套流程, 我们在来理一下.
在这里插入图片描述
新手画家用随机灵感画画 , 新手鉴赏家会接收一些画作, 但是他不知道这是新手画家画的还是著名画家画的, 他说出他的判断, 你来纠正他的判断, 新手鉴赏家一边学如何判断, 一边告诉新手画家要怎么画才能画得更像著名画家, 新手画家就能学习到如何从自己的灵感画出更像著名画家的画了。GAN 也就这么回事。

6.3 GAN网络

在这里插入图片描述
Generator 会根据随机数来生成有意义的数据 , Discriminator (判别器)会学习如何判断哪些是真实数据 , 哪些是生成数据, 然后将学习的经验反向传递给 Generator, 让 Generator 能根据随机数生成更像真实数据的数据. 这样训练出来的 Generator 可以有很多用途, 比如最近有人就拿它来生成各种卧室的图片。

6.4 GAN应用

比如:

  1. 让图片来做加减法, 戴眼镜的男人 减去 男人 加上 女人, 生成 戴眼镜的女人的图片;
  2. 甚至还能根据你随便画的几笔草图来生成可能是你需要的蓝天白云大草地图片;

7.神经网络 梯度下降

7.1 梯度下降(gradient)

在这里插入图片描述
初学神经网络的时候, 我们通常会遇到这样一个方程, 叫做误差方程 (Cost Function)。用来计算预测出来的和我们实际中的值有多大差别。
在预测数值的问题中, 我们常用平方差 (Mean Squared Error) 来代替。
W是我们神经网络中的参数, x, y 都是我们的数据, 因为 xy 都是实实在在的数据点, 在这个假设情况中, 是多少都无所谓, 然后再像这样继续简化一下, (注意, 这个过程在在数学中并不正确, 不过我们只是为了看效果), 所以现在误差值曲线就成了这样。
假设我们初始化的 W 在这个位置,而这个位置的斜率是这条线, 这也就是梯度下降中的梯度啦。我们从图中可以看出, Cost 误差最小的时候正是这条 cost 曲线最低的地方, 不过在蓝点的 W 却不知道这件事情, 他目前所知道的就是梯度线为自己在这个位置指出的一个下降方向, 我们就要朝着这个蓝色梯度的方向下降一点点。在做一条切线, 发现我还能下降, 那我就朝着梯度的方向继续下降, 这时, 再展示出现在的梯度, 因为梯度线已经躺平了, 我们已经指不出哪边是下降的方向了, 所以这时我们就找到了 W 参数的最理想值。简而言之, 就是找到梯度线躺平的点. 可是神经网络的梯度下降可没这么简单.

在这里插入图片描述
神经网络中的 W 可不止一个, 如果只有一个 W, 我们就能画出之前那样的误差曲线, 如果有两个 W 也简单, 我们可以用一个3D 图来展示。
可是超过3个 W, 我们可就没办法很好的可视化出来啦。在通常的神经网络中, 误差曲线可没这么优雅.

7.2 全局 and 局部最优

在这里插入图片描述

在简化版的误差曲线中, 我们只要找到梯度线躺平的地方, 就能能迅速找到误差最小时的 W。
可是很多情况是这样的, 误差曲线并不只有一个沟, 而且梯度躺平的点也不止一个。不同的 W 初始化的位置, 将会带来不同的下降区域。不同的下降区域, 又会带来不同的 W 解。
在这个图像当中, W 的全局最优解(Global minima)在这个位置, 而其它的解都是局部最优(Local minima)。全局最优固然是最好, 但是很多时候, 你手中的都是一个局部最优解, 这也是无可避免的。不过不必担心, 因为虽然不是全局最优, 但是神经网络也能让你的局部最优足够优秀, 以至于即使拿着一个局部最优也能出色的完成手中的任务。

8.迁移学习(Transfer Learning)

要善于学习先辈的经验, 一个人的成功往往还取决于先辈们累积的知识。这句话, 放在机器学习中, 这就是今天要说的迁移学习(transfer learning)。

8.1 怎么迁移

在这里插入图片描述
这就好比, Google 和百度的关系, facebook 和人人的关系, KFC 和 麦当劳的关系, 同一类型的事业, 不用自己完全从头做, 借鉴对方的经验, 往往能节省很多时间. 有这样的思路, 我们也能偷偷懒, 不用花时间重新训练一个无比庞大的神经网络, 借鉴借鉴一个已经训练好的神经网络就行.

8.2 还能怎么玩

在这里插入图片描述
了解了一般的迁移学习玩法后, 我们看看前辈们还有哪些新玩法。多任务学习, 或者强化学习中的 learning to learn, 迁移机器人对运作形式的理解, 解决不同的任务。炒个蔬菜, 红烧肉, 番茄蛋花汤虽然菜色不同, 但是做菜的原则是类似的.

本文:仅记录自己学习的过程,原教程视频链接: 有趣的器学习

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值