【深度学习】深度学习的本质(未完待续)

版权声明:本文版权归作者和CSDN共有,欢迎转载。转载时请注明原作者并保留此段声明,若不保留我也不咬你,随你了=-=。 https://blog.csdn.net/TeFuirnever/article/details/88992438

今天在查找网上的BP博文(【深度学习】backpropagation(反向传播))进行总结和撰写时发现了一篇博客和一个帖子引发了我的深刻思考,以下是分别的链接:

Yes you should understand backprop

Leaky abstraction

这篇博文可能会沉底,因为我目前深度学习的水平还太低,没办法做到深刻的理解和解释,所以这会是一个坑。

如果有人交流,我会虚心并且认真地学习;如果有大佬能谈论一下自己的理解,我会不胜感激。

一、起风了

在讨论到为什么要理解反向传播时,Andrej Karpathy给出的解释是:

The problem with Backpropagation is that it is a leaky abstraction。

那么什么是leaky abstraction

All non-trivial abstractions, to some degree, are leaky.
所有重大的抽象机制在某种程序上都是有漏洞的.

出自这篇博文抽象泄漏(leaky abstraction)

那么什么是抽象泄露呢?

首先说一下什么叫抽象:把许多复杂的东西隐藏起来的一种简化动作就叫做抽象。

然后我们继续说,抽象会失效,有时候轻微;有时候很严重,反正就是有漏洞。事情会因而出错,而且当你有抽象机制时到处都可能会发生。下面有一个例子:

下雨天时开车没办法开得和平常一样快,虽然车上有挡风玻璃雨刷有头灯有车顶还有暖气,这些装备应该是让你可以忽略下雨这个事实 (他们把天气抽象化了),不过看吧,你还是得担心天雨路滑,有时候雨甚至会大到你看不远,所以在只好慢慢地开,因为基于抽象泄漏法则,天气永远不能完全被抽象化。

抽象泄漏法则是造成问题的原因之一,是因为它说明了抽象机制并不真能照原构想,简化我们的生活。抽象泄漏法则表示,当某人发明一套神奇的新程序设计工具,可以大幅提升效率等等,就会听到很多人说:「应该先学会如何手动进行,然后才用这 个神奇的工具来节省时间。」程序设计工具假装抽象掉某些东西,和其他所有抽象机制一样都有漏洞,而唯一能适当处理漏洞的方法,就是弄懂该抽象原理以及所隐藏的东西。所以抽象机制虽然替我们节省了工作的时间,不过学习的时间是省不掉的。而这一切都似非而是地表示,即使我们拥有越来越高级的程序设计工具,抽象化也做得越来越好,要成为一个纯熟的程序员却是越来越难了。

我们十年前可能想像过,现在会有某些全新的程序设计规范让程序设计更容易。事实上这些年间所建立的抽象机制,的确让我们能处理更高复杂度的 软件开发(如GUI程序设计和网络程序设计),这是十或十五年前无法处理的。这些伟大的工具(比如OO型式的程序语言)虽然能让我们用飞快的速度完成许多工作,不过总会有一天我们得去追查因抽象泄漏而产生的问题,到时候就得查上两星期了。另外虽然你得雇一个以写VB程序为主的程序员,不过单纯的VB程序员 是不够的,因为当VB的抽象机制泄漏时他们就完全卡住了。

抽象泄漏法则正在拖垮我们。

非常沉重的话题,但是也说明了问题的严重性,深度学习作为近些年火的发红发紫的热门学科,在Hinton对深层网络做Pre-Train开始就是一个经验领先于理论分析的偏经验的一门学问,所以很多人戏称为黑盒子。

什么是黑盒子?所谓“黑盒子”,是指从用户的观点来看一个器件或产品时,并不关心其内部构造和原理,而只关心它的功能及如何使用这些功能。——百度百科那么我的问题是,深度学习的本质到底是什么呢?

二、春风十里

深度学习的本质到底是什么呢?

这个问题我在BN的博文中(【深度学习】Batch Normalization(批归一化))提到了一下

知乎高赞回答:关于深度学习的本质和优缺点大家说下自己的理解?

中给出了很多种个人理解,我个人比较赞同【哈啾路亚】的回答:

本质就是高维特征变换器,理论上可以做到任意非线性变换。神经网络在坐标系变换的同时,也顺便充当了信息过滤器。

目前来看,神经网络是通往强人工智能必经的第一步,就算要否定神经网络,也得拿出“高维特征变换”与“信息过滤器”这两个刚需的合格替代品,目前来看贝叶斯流派以及各种启发式,要满足这两个需求都还差得远。

猜你喜欢

转载自blog.csdn.net/TeFuirnever/article/details/88992438
今日推荐