Deep Learning: At The First Glance

这个计划和一篇论文、一段视频有关。

A Paper, A Video Clip

一年多之前,一款名叫 Prisma 的图片滤镜应用发布。与任何传统图像处理软件不同的是,它可以给予照片特定的一种艺术风格。效果虽然一般,但对那时刚刚高中毕业、尚未接触任何编程方面知识的我来说,仍然感觉到不可思议。

在这之前,绝大多数的图像风格处理滤镜都是在像素维度 (Pixel-wide) 上对图像进行操作:对 RGB 值的直接处理,以及在那时我看来已经很了不起的图像混合模式 (Blend Mode)。

再后来,出现了 Ostagram。在 Prisma 所能实现功能之外,Ostagram 还能够自己选择决定艺术风格的图片,从而允许了更多的可能。加之它支持通过付费购买算力来进行更多次迭代、生成更好的效果,许多处理后的图片已可用「Stunning」来形容。

出于兴趣驱动,我开始主动寻找关于这类图像处理算法的相关资料,发现它们最终都来自于一篇我完全看不懂的论文:A Neural Algorithm of Artistic Style

Ostagram 图像处理结果的例子,结合了左上图片的内容 (Content) 和左下图片的风格 (Style)

贯穿论文终始的一个术语,是 卷积神经网络 (Convolutional Neural Networks) 。大一来自高数课的压力,让大多数学生看到「积分」一词而感到本能的恐惧。当时,我也认为这项技术必然非常复杂、晦涩难懂。尽管感到新奇与向往,这一想法仍有可能永久地阻止我进入神经网络与深度学习这一领域 —— 如果不是因为 3Blue1Brown 的话。

那时候,3Blue1Brown 刚刚推出了这部视频:But What is a Neural Network,用敏悟直观、具启发性的动画讲解了何为深层神经网络,以及我们为什么需要它。如果说那一篇论文让我产生向往的话,那么这部视频便是使我意识到了:我有能力学习它;我完全可以进入并探索这一领域。

Can You Really Do This?

It’s easy for human to recognize a number through an image. It’s a pretty cool thing for computers to do.
—— Grant Sanderson @ 3Blue1Brown

在 3Blue1Brown 的视频中,作者演示了一个简单的 OCR 光学识别例子:一个包含一个 28*28 像素的图片输入,通过神经网络,来识别它是 0-9 中哪个数字的可能性最大。

3Blue1Brown 中所演示的神经网络

在观察和理解其工作原理与机制后,给我最大的震撼就是:「居然还可以这么操作?」

——是的,在我目前所接触到的传统计算机编程的印象中,通过一张图片识别数字,是几乎全部手工码成的复杂逻辑

我们要编写这样一个函数,探测这张图片是不是很可能在这个位置有一个圈?
要写这样的逻辑,判定当图片偏上方有 ○,偏右下侧有 | 时,这个数字有可能是9。
当然,前提是在 ○ 和 | 粘连而不分离的情况下。判定「粘连而不分离」需要另外一个函数。
是的,是的,有时候数字写得靠上, ○ 和 | 会都在图片偏上方。这时候,我们仍然需要得到准确判断的话,应该再写上这样一个逻辑…

而当使用深度学习,你所需要的只是构建一个神经网络,然后给出训练样本,让计算机自己计算这个网络中应该有什么样的逻辑。只要有大体量的训练样本,计算机会自己学习出一个能够准确识别数字的神经网络。

很酷。

我于是想起了近些年来人工智能热潮的兴起,和媒体的吹捧、炒作。

然而我不确定它们是否吹对了地方 —— 因为 AI 的概念早已不新奇了。所有计算机软件都可以称为 AI。我揣测他们所指,可能就是深度学习与神经网络在 AI 中的应用

Looking For Courses

在看过 3Blue1Brown 之后,我开始寻找资料,进行系统学习。

如果你也尝试过通过公开课学习神经网络,你会发现大多数人推荐 Andrew Ng (吴恩达) 的课程。我在 Coursera 上注册了他所讲授的斯坦福的机器学习课程。

Andrew Ng,美籍华人,Coursera 联合创始人之一。

Andrew 是一个很厚重、很认真的人,也很注重课程的质量。但对于我个人来说,他的课程存在问题:节奏慢;更注重计算过程与数学符号表达,而不是想法的阐释。这样的课可能对一些人是更好的,但我着实不太适应。整个课程几乎全部是以二倍速看完的,即便如此,有很多时候他讲到一个地方,就通常可以预料到他接下来的五分钟会在讲什么。还有一些时候,课程会跳出机器学习和神经网络的主题,而去花很多时间补漏微积分、线性代数中的知识。

后来,我注册了 deeplearning.ai 的深度学习课程,仍然为 Andrew 授课,但节奏显然快了些,获取知识的效率也有了适当的提升。当然,Andrew 的课整体上来说已经的确是所有深度学习中获取渠道、授课质量、细致度和本地化程度 (有中文字幕 + 网易公开课授权) 做得综合相对较好的课程。

Coursera 的在线课程非常贴合于传统的高校教学模式。有详细和相对固定的日程规划,有课堂论坛和助教,有 Project Assignment、课后习题和 Deadline,但它也兼具了传统教学中 不好的 我不喜欢的地方:细致周到、无微不至,注重于符号和形式。Coursera 的课程原则上是收费的,斯坦福的机器学习课程价格为 $79,但这一花费仅是让你能成为正式注册学生并能够拿到 Coursera 的认证证书 —— 不交钱也可以选择旁听,甚至也可以免费使用课程论坛,会有助教悉心地回答你的问题。

在学习完 Coursera 的课程之后,我发现 MIT 也有一套专注于神经网络与机器学习的课程:Introduction to Deep Learning

MIT 深度学习 2018 学期课程教学团队,嗯,很年轻。

这张页面的课程内容是在不到一个月之前发布的,但似乎 MIT 每年都会开一次这套课程,并作为公开课上传至 YouTube,每年也都会有相应的授课教师调整和内容更新。

在大体看了几个章节之后,我认为这一课程相比 Coursera 密度更大,内容和知识框架也更清晰。它的特点在于当堂较少有详细的符号说明和对于具体例子详细阐述的机制流程,我认为这是合理的,因为这些内容完全可以在课后独立整理成型。

相比之下,3Blue1Brown 走了另外一个极端:整个视频完全是在以直观形式阐述「想法」,且知识密度极高,一节 30 分钟的课程可能需要暂停数个小时才能完成。于是才有了 3b1b 的那句名副其实的 Slogan —— Pause & Ponder。相应地,它的视频也是在看完之后最常有兴奋和顿悟感的。

总之,计算机科学相关课程最好之处便是资源很多,总是可以择自己所适而学习。我的建议模式是以 3Blue1Brown 作为启蒙,随后再在其它平台进行系统学习

Seemingly Make Sense

在我写下这些文字时,已经从想法和概念上基本掌握了神经网络和深度学习的内容(只是搞懂了这是怎样一回事,但尚未有应试上和工程上处理问题的熟练度)。

相应地,也大致明白了最初让我踏入这一领域的那篇论文所描述的原理。

说来有些 counter-intuitive,但事实上,图片的风格 (style) 和内容 (content) 并不是两个对立面,而是同一种东西在不同尺度 (scale) 上的不同表现在人类大脑中的理解。而所谓卷积神经网络,大体上可以理解为普通神经网络专门为图像处理领域而衍生出的一个变种,在特定问题上,有着相比于普通神经网络具有更良好的表现。

除此之外,神经网络还可以做到许多别的对于计算机来说「很酷」的东西。理论上,所有大脑能做得到的事情,神经网络都可以完成。

Eg:有一种很特殊的职业,是为黑白老照片手工上色。因为人懂得草地是绿色的,天空是蓝色的,所以人会知道如何上色 —— 那么,计算机也可以。这听起来匪夷所思,但确实有一篇论文探讨了使用深度学习来学习对图片上色的本领的方法。目前,这一计算机的新本领已在 colorize-it.com 上线,你可以传入一张自己的黑白照片尝试效果。

利用 Colorize-it 对黑白图片进行上色的效果。但事实上,效果看起来比实际工作内容要好很多,因为人眼对色相 (hue) 的敏感度要远低于对亮度 (brightness) 的敏感度。这也是 JPEG 格式实现图片压缩而不影响显示效果的最主要原理 —— 弱化色彩细节。当然,扯远了。

In case you’re wondering,是的,要让计算机取得这样的能力,我们并不需要显式地编写程序逻辑 (explicit programming),只需要搭好神经网络架构、选择合适的参数,并给出足够的样本让计算机自己学习。

学习的效果也和人类类似:如果一个人没有见过牛,那么他便不知道给照片中的牛上成什么颜色。如果你给计算机的样本中不够大、不够充分,比如里面没有牛或类似牛特征的事物,那么计算机也很可能不会学习出给牛上色的能力。所以,深度学习也存在它的局限性,其中之一就是依赖于大量样本数据。

Thinking A Bit More

过去的几十年,计算机对于工程的贡献主要在于它对结构性数据 (Structured Data) 的处理能力,如数值、表单、单一颜色等,人们可以将现实生活中的数据转换为结构性数据,交由计算机储存和处理,解放了大批最简单的重复性劳动力。

而神经网络使得计算机对非结构性数据 (Unstructured Data) 如音乐、图像和文字段落的处理能力增加,稍微复杂一些的重复性劳动力,如道路驾驶、货物分拣、数字识别、医学影像诊断等亟待被解放。

这让我想起阿里巴巴的设计师 AI 鲁班。每秒钟制作 8,000 张设计图的新闻迅速传播,让许多设计师担心自己失业。在我看来,任何一个行业中担心自己被计算机取代的,都是那些行业底层的、循环执行重复工作的人们。让他们去实现自己本应更高的自我价值吧。这些人失业不应称为失业,应称为被解放。

一系列元素的简单堆叠 + 模式相对固定的排版。这种设计很容易被计算机取代。
具有深刻内涵的图形 + 艺术感染力 + 悉心雕琢的文案。这样的设计,受限于深度学习的局限性 (如可用样本数据的限制与计算复杂度),在相当一段可预见的将来不会被计算机取代。

神经网络是很神奇的东西。作为应用在计算机上的仿生学,它通过模拟人类大脑神经元的组织方式 (Andrew Ng 认为生物层面的单个神经元远远比计算机所模拟的神经元要复杂,因此不能将神经网络与生物神经结构作类比,但它们的组织方式确是相似的),去组织具有自我学习能力的程序。计算机神经网络是目前所有的仿生学应用中,颇为巧妙、高明的一例。

当然, 其中的技术细节多到不可胜数,从神经网络的形式到优化网络性能的各种手段、各种术语。无疑,越向后学越枯燥。而到现在为止,最令我震撼的,仍然是一开始的「通过模拟神经元来实现自我学习」的架构基础。

而如果没有当初的「居然还有这种操作?」带给我的启蒙,或许也便不会有去接触这些后续的、枯燥的知识的动力。

哦对了,标题里面还有一个其它。

假期当然做了许多其它事情。看了几部并不能让心情变好的电影。买回来的书 Word Power Made Easy,只完成了一个半章节的内容,便吃灰了。看了几部 TED 演讲,认识了有趣的 James Veitch 和更有趣的 Reggie Watts。还有相当的时间用来看 Stand Up 调剂生活,发现一个不错的英国演员 Michael McIntyre。和大多数美国的 Stand up comedian 很不一样,他的 Special 有非常积极的生活气息。嗯,梗以中产家庭的小故事居多。这之前看的全是 Louis CK 传播丧文化,Bill Burr 怒斥自己对社会的不满… …

还有就是有两天晚上把 YouTube 上历史点击量前十的视频都看了一遍 (全是 MV),接触了一把少年时期一直回避接触的流行文化。我的感受是:

不接触流行文化并不能让你变得不 low,但接触它一定能让你感到快乐。

寒假已经快要结束了,排满课程的新学期马上就要开始。

这个寒假,3Blue1Brown 已经向我倾注了太多对知识的渴望,但新学期来自课内学业的压力更加繁重。毕竟,不管背 PPT 多么无聊,不管做往年题到滚瓜烂熟多么没用,该刷的 GPA 还是要刷。

咱们下一个假期见。

+