这是一个随意书写的28*28像素、分辨率很低的数字 3 但你的大脑一看见就能轻松辨识出来 ,我想要你好好欣赏这点 人脑能够毫无障碍地辨识是非常厉害的
我的意思是,这个、这个、还有这个,都能被识别为 3 即使前后图像的图形组成有很大差异 当你看到这张 3 在眼中所激发的感光细胞 跟当你看到这张 3 所激发的感光细胞是非常不同的 但在你惊人聪明的视觉皮层的处理下 能将这两个3视为同一个概念,
同时将其他图像视为不同的概念
要是我要你:「嘿! 坐下来帮我写个程序, 」「输入像这个 28*28 像素的数字图像」 「接着输出该程序认为的 0 到 10 之间的一个数字 ,必须跟你认为的一样。」 这个任务将不再是家常便饭,而变得吓死人的困难 除非你是山顶洞人 我想不用再强调机器学习和神经网络之间,对未来发展的关联性和重要性 我现在要向你展示神经网络究竟是什么 假设你没有相关背景知识
我会可视化神经网络的运作 并且把它当作一门数学,不仅仅是当下流行词语
我希望你将能理解为什么神经网络是长这个样子 当你看到或听到机器借着神经网络来「学习」时 是了解其意涵的 这支视频将解释神经网络的结构structure 而下一部影片将解释机器学习learning。
我们要做的是打造一个可以辨识手写数字的神经网络 这是介绍这种主题很典型的范例 我乐于保持这种模式,因为在看完两支影片后 我会给你一些很好的网站,你可以在那里学到很多,并且下载代码 在你的电脑里好好研究 神经网络发展成很多很多不同类型 而且近年来对这些的研究有爆炸性的趋势
但这两支入门影片只会带你来认识,最简单的一种神经网络:「多层感知机 multilayer perceptron」(MLP) 最基本的样子 这是必要的入门知识 对于将来要理解现在任何一种强大的神经网络 而且相信我,今天的主题已经够复杂了,足以让你脑袋打结 即使是这么简单的神经网络也可以经由学习来分辨手写数字 这对电脑来说是非常酷的一件事 而且与此同时你也将看到神经网络不尽人意的地方
神经网络一如其名,是启发自生物的大脑神经结构 让我们来剖析它吧
何谓神经元,又是什么机制让它们连在一起的?
现在,当我说「神经元」,我要你联想到它是乘载一个数字的容器 基本是介于0和1之间的数字,但实际上不止于此
例如:神经网络以输入图像的每个像素,对应到每个神经元作为输入 也就是说输入层总共有784个神经元,每个都有乘载数字 ,每个数字代表了对应像素的灰阶值灰阶值0即黑色,1即白色这些在神经元中的数字称为「激活值」 在此你可能注意到 每当神经元激活值越高,该神经元就越亮 于是全部的 784 个神经元,组成了神经网络的第一层
我们现在跳到最后一层,这层有10个神经元,各自表示0到9的数字同样在这边的神经元也各自有着介于0到1的激励值表示对于给定的图像,神经网络对于实际数字的判断结果在输入层和输出层之间,有数个「隐藏层」 现在在本入门影片里 对于神经网络是如何进行判断的,我们只能先把它看做是巨大的问号 本影片展示的视觉化神经网络,我设计了两个隐层, 个别搭载16个神经元 这只是摆好看的设定 老实说之所以选择两个隐层,是基于可视化让你看得清楚的考量,待会解释
而安排 16 个神经元,只是为了符合版面,也是为了让你看得清楚 在实际应用上,神经网络的结构经实验不断调整可以变得非常巨大且特殊 神经网络操作一层激励值的方式,会决定下一层的激励值 这正是神经网络的核心价值,不同以往的数据处理技术,现在发展成只要输入 激励值从上一层传到下一层,最后输出足够正确的结果 神经网络的本质就是模仿生物的大脑, 就像一丛脑细胞被激发 引发其他神经细胞的串联反应 我现在展示的 这个神经网络已经训练完成了,可以准确识别图像中的数字
让我来解释「传递激励值」这点 意思是:当你输入一张 28x28 像素的图像,它将点亮 所有 784 个神经元 每个都比照对应像素的灰阶值,来决定自己的激励值 决定的数值分布状态会影响下一层被激活的神经元的分布 又会导致下一层不同的分布 最后抵达输出层,输出层的神经元也会有特定的分布 而最亮的那个就是神经网络所认为最有可能答对的答案 但在一脚踏进数学之前, 要先知道上层如何影响下层,而且机器学习为什么会有用
为什么我们认为层状结构会像这样聪明地运作是非常合理的? 我们在期待什么呢? 我们最想要神经网络的隐藏层怎么运作呢? 在你或我在辨识图中的数字时我们会把各种笔画拼凑在一起。
一个 9 字,上面有圆圈,而在右边有一条直线 一个 8 字,上面也有一个圆圈但在下面与另一个圆圈相连 一个 4 基本上可以拆解成就像那些特定的笔画
一个理想的情况中我们会希望第二层的每个神经元 能识别这些笔画的其中之一 每次你输入一个有顶部有个圆圈的图像如 9 或 8 时 隐层第二层的某些特定神经元的激励值就会接近 1 而我要的并不是单单适用这种圆圈, 而是更广泛的各种圆圈皆适用 如此,在隐层第二层到输出层的神经元
只需要学习对应于数字的笔画的组合 当然这又丢出了一道难题 因为你怎么让那些神经元知道那些数字该对应到那些特定的笔画? 而我甚至还没开始讲上一层怎么影响下一层,但是再听我解释一下这里 辨识一个圆圈的问题也可以分解成辨识一些较小零件的问题 一个合理的方法是认出组成它的各式各样的边 同样的道理,你在数字1,4或者7中所看到的一条长线真的就是好几小条的短线,根据特定笔画顺序,组合成的长线 所以我们期望在这网络第二层
对应着各式各样的一些小边 也许出现一个像这样的一个图像就点亮 所有大约有 8 到 10 种有关的特定神经元 它接着点亮后上方的圆圈和一根垂直的长线以及点亮和一条线相联的神经元 最后点亮数字 9 的神经元 不管这个是不是我们最终的网络实际上的实施是另一个问题 这个我们在知道怎样了训练网络之后我在回过来讲 但至少我们可能有点希望 像是一种以这样分层结构为目标的
你可以进一步想象怎样能来检测像这样的边和式样对其他的图像识别功能真是有用的
参考
https://youtu.be/aircAruvnKk?si=vvJtlByXpXaDHj7y