讨论:对于神经网络,不需要弄明白原理,只需要应用,是这样吗?

Posted Python遇见机器学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了讨论:对于神经网络,不需要弄明白原理,只需要应用,是这样吗?相关的知识,希望对你有一定的参考价值。

一位CV领域的硕士问:一直弄不懂神经网络原理,看了很多教程博客还是弄不懂,我想是不是不需要弄懂啊?

个人觉得:不懂原理能做些应用,但是想出成果就难了。可以参考下网友的讨论。

网友的讨论

1

有几种程度的“弄懂神经网络的原理”:

  1. 知道loss function的作用,知道sgd minimize loss function的过程就是神经网络(包括传统机器学习)的学习过程。知道loss function,optimizer背后的优化原理

  2. 知道CNN的一些trick,怎么调结构,调超参数,背后的直觉是什么,这个直觉就是原理

  3. 研究overparameterized neural network的generalization原理

这些原理的重要性:

  1. 这是大二数学,学习人工智能必备的。如果这都不懂,建议回炉重造

  2. 这是成为一名工程师必备的技能。这个搞不懂不建议从业人工智能

  3. 这是优秀PhD研究的内容。这个搞不懂对找工作毫无影响。

2

绝大部分所谓机器学习从业者,包括知乎上的,都对神经网络的原理一知半解。不指望所有从业者搞明白神经网络里面的数学,只希望能让大家不要觉得所谓的deep learning就是无脑调参。个人觉得即使不懂原理也可以找一个不错的工作,但在工作/科研中一定会受到局限。

关于神经网络原理有很多工作,大范围的比如说Neural Tangent Kernel 的一系列工作。

https://arxiv.org/pdf/1806.07572.pdf

关心CNN的话对于residual connection也有很多理论解释

https://arxiv.org/pdf/1909.04653.pdf

对于GAN,尤其是GAN的generalization bound也有不少人尝试

https://arxiv.org/pdf/1703.00573.pdf

以上都是冰山一角。

还有很多关于神经网络的optimization的工作可以看Princeton的Jason Lee和UW的Simon Du 杜少雷。

3

不懂原理,我觉得跑demo。做应用。写毕业论文甚至发论文可能都可以。但我觉得你找工作就比较困难了。

4

以现在开源工具的发展水平来看,你即便是“只需要应用”也要搞懂一些原理,否则连应用都做不出来。你做应用至少还需要理解问题,根据问题选择合适的模型,并且调调超参数。针对特定问题,找到合适模型。这一步就需要你能看懂模型的适用范围与优缺点。想要做到这点,就需要你对其背后的原理有一定的了解。调超参数就更需要根据实验反馈结果定位哪个超参有问题了。这需要对模型和数据有更深刻的理解才行。所以,做应用就需要懂原理。

但是,这是基于现有机器学习工具的发展水平来说的。也许有一天,会出现一个基于Keras的开源软件,自动帮你选模型调参呢。

到时候你做应用可能就真的只会应用就行了,真的好期待这一天哦!

5

显然不是。即使只是应用神经网络的话,也需要理解常见的组件/模型结构的意义,它们为什么work/不work。

例如batch normalization 的作用,skip-connection的作用,各种优化器的优缺点等知识点需要非常熟悉。不然你调参数的效率是会显著低于有经验的算法工程师的,而且当你遇到神经网络不收敛、loss降不下去、疯狂过拟合等各种各样的问题时你是没有办法知道怎么去解决的。

上面举例的知识点掌握起来其实并不难,而且应用的话学到这种程度就足够了。至于背后深入的数学原理,神经网络可解释性的问题过于前沿了,现在不去了解也没有什么关系。

总结

绝大部分回答都是认为需要了解神经网络的原理,但是否深入,看你的需求了。

 
   
   
 

重磅!

Python遇见机器学习交流群已成立!


额外赠送福利资源!
邱锡鹏深度学习与神经网络,pytorch官方中文教程,利用Python进行数据分析,机器学习学习笔记,pandas官方文档中文版,effective java(中文版)等20项福利资源

获取方式:进入群后点开群公告即可领取下载链接

注意:请大家添加时修改备注为

[学校/公司 + 姓名 + 方向]

例如 —— 哈工大+张三+对话系统。

号主,微商等广告请自觉绕道。谢谢!


推荐阅读

•  

•  

•  

•  

•  

•  

•  

•  

•  

•  

•  

以上是关于讨论:对于神经网络,不需要弄明白原理,只需要应用,是这样吗?的主要内容,如果未能解决你的问题,请参考以下文章

隔壁王大爷都弄明白了“锁“——java锁机制(实现原理)

学嵌入式Linux软件开发需要的知识

不基于比较的基数排序原理图解

一图弄明白DFTDTFT和DFS之间的关系

我和Ajax的故事

gRPC 实现原理