深度学习入门 资料

2017-12-03 00:00:00 u013709270 阅读数 4186

作者:刘才权

编辑:栾志勇


经常被同学和朋友询问机器学习或深度学习入门,有哪些不错的参考资料。老实讲,这个问题在网上随便一搜就是一大把的答案。我自己在最开始的时候也有同样的困惑,同样在搜索引擎和论坛里翻找答案。但大多数答案并不怎么让人满意:搜索结果要么星稀零散,只见树木不见森林;要么过于详尽,让人无从下手(很多资料作者自己都没看过)。

在这篇文章里,我把自己在学习过程中的参考资料进行了梳理。一方面,希望能给你一个相对系统的学习路线参考;另一方面,自己真实的实践经历,遇过坎,掉过坑,希望能给正准备入门的同学更多真实的借鉴。

入门视频

机器学习

很多人会推荐吴恩达在斯坦福的公开课CS229,但对于初学的同学来说,我觉得并不适合。虽然Andrew在课的最开始就说了,他的这门看更侧重于实践。但真实情况是,里面有太多的数学推导和证明。直接使用这门课来入门,对初学的同学来说,在信心上会是不小的打击。特别是很多从应用开发转到机器学习的同学,毕竟在平常的工作中,大学的数学知识在实际的开发中应用的并不多,估计很多现在都已经生疏了。

对于机器学习,我推荐吴恩达在Coursera开设的机器学习课程,课程免费,侧重于基本的原理和工程实现,对初学者相对友好。字幕中英可选。
课程链接:

https://www.coursera.org/learn/machine-learning


深度学习

大家可能看过《一天搞懂深度学习》的PPT,作者是台湾大学的李宏毅老师。其实,李宏毅老师还有门深度学习的课程,视频也挂在网上。这门课主要针对初学者,不需要有经典的机器学习基础(其实,深度学习入门,比经典的机器学习更容易)。课程的内容深入浅出,训练和预测样本都是各种数码宝贝和二次元卡通人物,绝对让你耳目一新。没有字幕,中文授课(台湾腔)。
课程链接:

http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html


入门书籍

机器学习


《机器学习》

机器学习的入门书籍,当仁不让的就是周志华老师的西瓜书《机器学习》了。这本书基本囊括了绝大多数经典的机器学习方法。但坦白的讲,这本书入门也不是那么轻松,大量篇幅的数学推导和证明。建议初学者可以在第一遍的时候跳过具体的数学推导,更侧重在知识框架和原理的学习和提炼,后面可以通过第二遍或第三遍来深入其中的数学原理。

深度学习

《深度学习》

这一本称为目前深度学习领域的圣经,而作者们也确实做到了深入浅出,循序渐进。不是单纯的抛一个结论,而是逐步的深入,最终阐明原理。建议像《机器学习》一样使用:不要求第一遍就能全部吸收,可以先从框架和基本原理入手,跳过部分细节,后面再逐步深入。


数学基础

看前面的视频和书籍,对于很多从事应用开发的同学来说,可能最大的障碍就是对数学的恐惧。这种感觉大概就像没经历过算法训练的同学面对算法面试一样。其实,恐惧只要能直面它,那就一定能够克服掉。就好比LeetCode这样的OJ平台刷完200道左右的题目,再去面试算法一样。以前觉得是天大的障碍,现在回过头来,也不觉得有什么了不起。

我个人的经验是,通过前面的视频和书籍已经对机器学习和深度学习有了基本的系统框架和原理认识,同时,也积累了对数学知识进行系统复习的强烈欲望。这时候就可以有的放矢的复习大学知识了。数学知识的复习,我都是通过看网易公开课来完成的。

微积分

MIT《单变量微积分》:

http://open.163.com/special/sp/singlevariablecalculus.html

虽说是MIT的课程,但坦白的讲,老师的节奏真是比国内的课程还要慢,真正做到了通俗易懂

网易公开课还有MIT的《多变量微积分》,但我没有看,我觉得复习完单变量微积分,也就基本够用了。

线性代数

MIT《线性代数》
http://open.163.com/special/opencourse/daishu.html

这门课就没有上面的《单变量微积分》那么Nice了,老师思路跳跃性很强,稍一走神就不知道讲到什么地方了。但这门课有个很大的优点,就是从一开始就引入了向量空间的概念,而且贯穿始终。不像国内的课程,直到课程结束都以为线性代数只是求解方程组的另一种表达形式。

概率 / 统计

可汗学院《概率》
http://open.163.com/special/Khan/probability.html

可汗学院《统计学》
http://open.163.com/special/Khan/khstatistics.html

老实讲,可汗的公开课真是太细致了,细致到觉得拖沓(可能是复习,而不是初学者的缘故)。建议根据自己的需要做适当的跳跃。同时,两门课有部分内容是完全重合的,可以直接跳过。


Python

有了前面的基础相信你已经跃跃欲试了,但别急,工欲善其事必先利其器。可能你已经有MATLABC/C++Java的编程经验,但建议再入手一款新武器-Python。虽然前面的语言也可以用于机器学习和深度学习相关的研究和开发,但Python的使用范围更广,参考资料也更加丰富

我的自己经验是:

1.在网上找一篇Python入门的帖子,搭建环境,运行简单的例子(半天)

2.找一本基础书籍,系统的熟悉下语言的基本特性和完整框架(1~2天)(ps:我之前有C/C++和Java的语音基础)

3.开始正常使用Python进行开发,遇到问题,求助搜索引擎(2个月以上)

4.觉得自己对语言就基本的掌握后,可以根据选择进行进阶学习了

亲,花上面1~2天时间来系统的熟悉Python语言特性和语言框架,然后通过我推荐的python书籍来强化学习!


《Python基础教程》

(这本书很厚,初期把目录扫完就可以了,后面当做字典来使用)


Python基础教程


进阶阶段,推荐:

《流畅的Python》

流畅的Python


动手实践


好了现在我们终于可以动手实践了!

初级

《Python机器学习及实践:从零开始通往Kaggle竞赛之路》

Python机器学习及实践:从零开始通往Kaggle竞赛之路

这是很薄的一本书,但对于初学者实践来说却是非常棒的一本书。书中的大多数算法都是基于sk-learn来实现的。使用现成的Python库,而不用关心具体算法实现过程,可以快速体验机器学习算法的效果。同时,书的最后比较细致的介绍了Kaggle竞赛平台的使用,实战性更强

Python机器学习及实践:从零开始通往Kaggle竞赛之路》使用现成的Python库(工程中也大多是这样的)。但很多同学还是更希望能手工实现具体的算法,觉得这样基本功才扎实,那下面的这两本书就能很好的满足有这样想法的同学了。

进阶

《机器学习实战》

机器学习实战

经典的机器学习算法手工实现,书中包含大量的代码实例。但这本书出本的比较早,深度学习内容基本没有涉猎。针对这种情况,就有了下面这本的推荐:


《TensorFlow Machine Learning Cookbook》

TensorFlow Machine Learning Cookbook

这本书主要是基于TensorFlow的,手工编织网络。而且,书的内容就像它的名字一样,结构编排跟类似菜谱:开始前需要准备什么,开始后需要遵从哪些步骤,最后又会得到怎样的结果,条理非常清晰。目前这本书已经有了中文版。


领域应用

虽然我们花费了很长的时间,投入了很多精力,但我们目前的阶段仍然像做大学作业,跟真实的工业场景相差很远。那机器学习和深度学习在实际的AI场景是如何应用的呢?带着这样的问题,我推荐两本书:

《数学之美》


数学之美

吴军老师的经典之作。虽然这本书火的时候,AI都还没有现在这么火,但书中介绍的很多场景,使用的很多技术,基本都是来自我们学习的机器学习。


《统计自然语言处理》

统计自然语言处理

选择这边书是因为自己当前的工作跟自然语言处理相关。当然了,这也是自然语言处理领域非常经典的一本书,内容全面丰富。但学术的气息比较重,读起来又找到了当初读研看Paper的感觉。


杂项

比较正统的学习基本就算介绍完毕了。其实,除了上面的主线内容外,很多比较零散的资料,对于学习来说也还是很有裨益的。

《莫烦视频》

莫烦的个人主页有很多机器学习和深度学习相关的个人录制视频。以非常简洁的方式介绍了机器学习和深度学习相关的概念和框架,对初学者快速建立概念很有帮助(PS:92年的小鲜肉,真是不得了)
地址:https://morvanzhou.github.io/about/

《深度学习简化版》

形式跟莫凡的视频类似,是老外录制的。相比于莫烦的视频,内容更丰富多样,形式更新颖。通过YouTube播放,需要翻墙。
地址:https://www.youtube.com/watch?list=PLjJh1vlSEYgvGod9wWiydumYl8hOXixNu&v=b99UVkWzYTQ

《AI技术内参》

这是《极客时间》的一个付费专栏。主要推送AI相关的技术历史、当前行业信息和科研成果,从目前的使用情况来说,在品质上还是有保障的。

好啦,暂时就先这样吧,后面有更好的内容再更新,也欢迎大家分享自己的学习经验!

 




1.从AlexNet剖析—卷积网络CNN的一般结构

2.深度神经网络训练的必知技巧

3.[视频讲解]史上最全面的正则化技术总结与分析



扫描个人微信号,

拉你进机器学习大牛群。

福利满满,名额已不多…

80%的AI从业者已关注我们微信公众号

       

       



2019-07-03 22:07:08 wills798 阅读数 458

机器学习入门,初学者遇到的问题非常多,但最大的问题就是:

资料太多!!!看不完!!!不知道如何取舍!!!

 

 一、机器学习的数学基础

正规的机器学习数学基础主要有:

数学分析(微积分),线性代数,概率论,统计,应用统计,数值分析,常微分方程,偏微分方程,数值偏微分方程,运筹学,离散数学,随机过程,随机偏微分方程,抽象代数,实变函数,泛函分析,复变函数,数学建模,拓扑,微分几何,渐近分析......

以上内容可能引起初学者不适。

其实大部分人学习机器学习的目的,只要会用机器学习算法及工具,解决一些问题,了解算法的基本原理即可,并不需要学得那么深入。没有几个人能像博士一样扎实地学好数学基础,只是希望快速入门机器学习,那么只需要掌握必要的几个基础点就好了。机器学习的数学最主要是高等数学线性代数概率论与数理统计三门课程,这三门课程应该是本科必修的。本站整理了一个简易的数学入门文章。

推荐文章:

  • 机器学习的数学基础

    如果真的忘了基础公式,那就看下上面这篇文章:,可以把这篇文章提供下载数学资料看一遍,不需要全看懂,但是基础的公式要大致明白,能从资料中查找公式,里面有两个公式总结材料:a.机器学习的数学基础.docx(中文版,对高等数学、线性代数、概率论与数理统计三门课的公式做了总结) ,b.斯坦福大学机器学习的数学基础.pdf(原版英文材料,非常全面,建议英语好的同学直接学习这个材料)。

 二、经典的机器学习资料和教程

1)吴恩达《机器学习》公开课

原课程地址:coursera.org/course/ml

机器学习入门的最佳教程应该是吴恩达老师的《机器学习》公开课,这门课面向初学者,注重实际应用,并不侧重数学推导。这门课开课较早,但到现在仍然是最火的机器学习公开课,评分非常高,课程配套作业(octave版本)。

学习这个课程注意事项:

  • 第五章Octave教程、第十八章应用实例,这两章可以不用学,有点过时了。

  • 原版的octave作业可以不用做,可以做修改过的python版本作业。

  • 如果和吴恩达老师的《深度学习》公开课一起看,第四、五、六周的内容可以直接学习《深度学习》的相关内容。

  • 这个教程建议在三个月内看完,如果有些地方看不懂,没关系,以后用到的时候再回头看看。

  • 这个课程建议配合课程笔记一起看。本站已经提供了笔记下载

2) 《机器学习小抄-(像背托福单词一样理解机器学习)》

把机器学习的概念做成背托福单词的随身小抄一样方便!分分钟搞定机器学习各种记不住的概念!这篇建议用一周时间看完,注意是略读,有些地方不懂没关系,做下记录,以后用到的时候再查。

3) 李航《统计学习方法》

《统计学习方法》详细介绍支持向量机、Boosting、最大熵、条件随机场等十个统计学习方法。对数学基础有一定要求,这是经典中的经典,很多国内的网课,互联网企业的面试、笔试题目,或多或少,参考了这本书的内容,对初学者来说,有点难度,但是,如果想通过面试笔试,这本书应该要看懂,试着推导下算法。

本站用python实现了大部分算法,建议试着运行下。

4) 台湾大学林轩田老师的《机器学习基石》、《机器学习技法》课程

台湾大学林轩田老师的《机器学习基石》《机器学习技法》课程由浅入深、内容全面,基本涵盖了机器学习领域的很多方面。其作为机器学习的入门和进阶资料非常适合。

这门课有一个配套教材:《Learning From Data》(LFD),林轩田也是编者之一。这本书的主页为:http://amlbook.com/。豆瓣上关于这本书的评分高达9.4,还是很不错的,值得推荐!可以配套视频一起学习。这本书内容通俗易懂,非常精彩,不是单纯罗列公式,是一本非常适合入门的机器学习书籍。

5) 吴恩达《深度学习》公开课

原课程地址:www.deeplearning.ai

这个视频教程用最简单的方式,把深度学习的主要算法和框架讲得非常清楚,课程附带代码作业和测试题作业,学完以后,深度学习就算入门了。每章的学习建议:

  • 第一章:神经网络与深度学习

    部分内容是《机器学习》公开课的第四、第五周的升级版

  • 第二章:改善深层神经网络 

    这部分内容基本没有和《机器学习》公开课有重合部分。

  • 第三章:结构化机器学习项目

    部分内容是机器学习的第六周的升级版。

  • 第四章:卷积神经网络 

    这部分主要用于图像、目标检测方面的,相当于斯坦福CS231n深度学习与计算机视觉-李飞飞主讲的课程的简化。

  • 第五章:序列模型 

这部分主要用于自然语言处理,注意一点:RNN/LSTM结构里的符号,和原始论文有点不一样,我们平时的博客、论文的符号,跟吴恩达老师的课程的符号略有区别。

6) 李宏毅《一天读懂深度学习》讲义

台大李宏毅教授的深度学习讲义,这是我见过最容易懂的深度学习入门资料,300多页的讲义能系统、通俗易懂地讲清楚深度学习的基本原理,如同机器学习小抄一样生动形象。

建议用几天时间把这个讲义浏览一次,可以基本了解什么是深度学习,深度学习有什么用。

推荐文章:

  • 吴恩达《深度学习》测试题翻译和解答,面试笔试必备。

 三、学好编程语言

机器学习理论上需要精通Python、Java、R、MATLAB、C++等编程语言。

如果只是入门,仅推荐Python这门编程语言。

机器学习主要的代码工具为Python,Python学习到底要学到什么程度?个人感觉:入门最重要,至少要学到碰到问题能查百度的程度。

1) Python安装:

关于python安装包,我推荐下载Anaconda,Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本Python并存、切换以及各种第三方包安装问题。下载地址:https://www.anaconda.com/download/ 推荐选Anaconda (python 3.7版本)

IDE:推荐使用pycharm,社区版免费,下载地址:https://www.jetbrains.com/

2) python入门的资料推荐

a.《利用python进行数据分析》

这本书含有大量的实践案例,你将学会如何利用各种Python库(包括NumPy、pandas、matplotlib以及IPython等)高效地解决各式各样的数据分析问题。这个是我看的第一本python入门资料,如果把代码都运行一次,基本上就能解决数据分析的大部分问题了。

下载地址:建议购买书,源代码可以上百度搜索。

注意:第二版中文翻译已经有人写了,建议搜索下载。

b.python入门笔记

作者李金,这个是jupyter notebook文件,把python的主要语法演示了一次,值得推荐。

下载地址:https://pan.baidu.com/s/1snmeqlR 密码:hkv8

c.南京大学python视频教程

这个教程非常值得推荐,python主要语法和常用的库基本涵盖了。

视频下载地址:https://yun.baidu.com/s/1cCbERs 密码:7thx

看完这三个资料,python基本入门了,同时可以使用scikit-learn等机器学习库来解决机器学习的问题了。

3) 深度学习主要框架的学习

深度学习的主要框架,最基础的,应该是Tensorflow和Keras。教程很多,可以选择性地学一下,本站推荐简便的入门方法:

a.Tensorflow入门

吴恩达《深度学习》公开课第二门课3.11介绍了Tensorflow的基本用法(对应笔记p251),这些用法会了以后,基本上能看懂大部分代码了,结合该课程的代码作业,不懂的地方搜百度都能搜到了。

此外有个资源要推荐下:

资源地址:

https://github.com/aymericdamien/TensorFlow-Examples

本资源旨在通过示例轻松深入了解TensorFlow。 为了便于阅读,它包括notebook和带注释的源代码。

它适合想要找到关于TensorFlow的清晰简洁示例的初学者。 除了传统的“原始”TensorFlow实现,您还可以找到最新的TensorFlow API实践(例如layers,estimator,dataset, ......)。

b.Keras入门

《python深度学习》书和配套代码,《python深度学习》由Keras之父、现任Google人工智能研究员的弗朗索瓦•肖莱(François Chollet)执笔,详尽介绍了用Python和Keras进行深度学习的探索实践,包括计算机视觉、自然语言处理、产生式模型等应用。书中包含30多个代码示例,步骤讲解详细透彻。

作者在github公布了代码,代码几乎囊括了本书所有知识点。在学习完本书后,读者将具备搭建自己的深度学习环境、建立图像识别模型、生成图像和文字等能力。但是有一个小小的遗憾:代码的解释和注释是全英文的,即使英文水平较好的朋友看起来也很吃力。

本站对全部代码做了中文解释和注释,并下载了代码所需要的一些数据集(尤其是“猫狗大战”数据集),并对其中一些图像进行了本地化,代码全部测试通过。(请按照文件顺序运行,代码前后有部分关联)。

本站认为,这本书和代码是初学者入门深度学习及Keras最好的工具。

 

c.Pytorch入门

资源地址:

https://github.com/yunjey/pytorch-tutorial

这个资源为深度学习研究人员提供了学习PyTorch的教程代码大多数模型都使用少于30行代码实现。 在开始本教程之前,建议先看完Pytorch官方教程。

推荐文章:

 四、论文相关和大师之作

学好英语,熟读经典论文,并且读最新的机器学习论文,如顶级会议论文等,掌握最新的技术方向,要经常看技术类博客和文章,也要会写论文。

英文不好的话,输入论文名称,通常能查到该论文的中文内容的博客和文章,这样稍微轻松点。

推荐文章:

  • 首发:徐亦达老师的机器学习课件及下载(中文目录)

    徐亦达教授在github公布了他的历年机器学习相关课件、视频,黄海广博士协助徐亦达老师对课件目录进行翻译和整理,并提供下载。

  • 机器学习的宝典-华校专老师的笔记

    这是华校专老师多年以来学习总结的笔记,经整理之后开源于世。内容分为:数学基础、统计学习、深度学习、自然语言处理、计算机视觉、工具这几个方面。

  • 吐血推荐收藏的学位论文排版教程(完整版)

     本文将介绍学位论文的页面布局,标题格式,文档生成列表,插入公式,页眉页脚,生成目录、表格和图片的交叉引用、插入参考文献、英语翻译校对等内容和技巧,学习内容偏多,同学们可以先收藏下来,慢慢学习。

  • 科研工作者的神器-zotero论文管理工具

    Zotero作为一款协助科研工作者收集、管理以及引用研究资源的免费软件,如今已被广泛使用。此篇使用说明主要分享引用研究资源功能,其中研究资源可以包括期刊、书籍等各类文献和网页、图片等。

 五、参加实际项目

如果有大厂的实习机会,尽量去,能学到不少东西。没有实习机会,可以尝试参加下kaggle比赛,不一定要取得多少名次,可以搜搜历次比赛,下载数据,下载别人的公开代码,复现下。国内也有类似的比赛,如天池,DF等。

通常,在2-3个比赛能达到top1%的成绩,代码能力基本没有问题了。

但是,不建议在比赛中花太多时间,比赛大部分时间是用于特征工程,在实际工作中并不一定能用上,只要能解决问题就行了,其他时间用于学习吧。

本站推荐文章:

  • 开源-BDCI2018面向电信行业存量用户的智能套餐个性化匹配模型Top1解决方案和代码

    公布了:BDCI2018面向电信行业存量用户的智能套餐个性化匹配模型数据竞赛top1解决方案和代码。该方案利用已有的用户属性(如个人基本信息、用户画像信息等)、终端属性(如终端品牌等)、业务属性、消费习惯及偏好匹配用户最合适的套餐,对用户进行推送,完成后续个性化服务。 (最终排名1/2546)

  • 开源-BDCI2018供应链需求预测模型第一名解决方案和代码

    公布了:BDCI2018供应链需求预测数据竞赛第一名的解决方案和代码。该方案利用赛题为运用平台积累最近1年多的商品数据预测45天后5周每周(week1~week5)的销量,为供应链提供数据基础,将能够为出海企业建立全球化供应链方案提供关键的技术支持。

  • 一些NLP的入门资料参考

    整理了一些NLP的入门资料参考,建议初学者看看。

  • CTR预估系列:DeepCTR 一个基于深度学习的CTR模型包

    在计算广告和推荐系统中,CTR预估一直是一个核心问题。无论在工业界还是学术界都是一个热点研究问题,近年来也有若干相关的算法竞赛。本文介绍一个基于深度学习的CTR模型包DeepCTR,具有简洁易用、模块化和可扩展的优点。(本文作者:沈伟臣)代码主页:https://github.com/shenweichen/DeepCTR

 六、多和学习者交流

交流的方式有很多种,如参加学术活动、实验室讨论等,但我认为最有效的交流方式还是加入一些学术讨论组织,如微信群,qq群等。“闻道有先后术业有专攻”,不懂很正常,不懂就要问,“三人行,必有我师。”

 七、总结和建议

本文提供的只是初学者的学习路线及资料,入门了以后,你就会知道哪方面的不足,自己也会找资料学习了。

同时建议时间充裕的同学,尽可能打好数学基础,如果基础不扎实,只会用一些工具和框架,相当于某些武术家只会耍套路,外行人觉得很厉害,但实战起来一定是鼻青脸肿。为什么机器学习从业人员学历越高,往往工资越高,通常和掌握的基础知识正相关。

 

转载:https://mp.weixin.qq.com/s/5BqOEbpzqH1wO2yB0Qfs_w

2017-06-29 21:29:57 Mengwei_Ren 阅读数 576

深度学习概述:从感知机到深度网络

原文:https://www.toptal.com/machine-learning/an-introduction-to-deep-learning-from-perceptrons-to-deep-networks
译文:http://www.cnblogs.com/xiaowanyer/p/3701944.html

the data science blog 上介绍卷积神经网络相关的文章

《An Intuitive Explanation of Convolutional Neural Networks》

原文地址: https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/

《A Quick Introduction to Neural Networks》

原文地址:https://ujjwalkarn.me/2016/08/09/quick-intro-neural-networks/

可视化CNN

3D visualization of a Convolutional Neutal Network http://scs.ryerson.ca/~aharley/vis/conv/

Caffe:开源的深度学习框架

《Caffe: Convolutional Architecture for Fast Feature Embedding》

Yangqing Jia, 2014
paper 地址:https://arxiv.org/pdf/1408.5093.pdf

《Caffe环境配置》

博客:hjimce
http://blog.csdn.net/hjimce/article/details/48781693

《caffe简易上手指南(一)—— 运行cifar例子》

博客:Alex Cai
http://www.cnblogs.com/alexcai/p/5468164.html

2015-06-11 10:44:46 dcxhun3 阅读数 865

作为一枚对机器学习有基础,但对深度学习一无所知的DL-er。就这样在深度学习的浪潮下,走上了Dl的探索道路。

现在就开启学习记录之旅。。。。

看到下面这些推荐,知道我我入门的角度是对的,因为这些都是热推荐,继续caffe和UFLDL----->go!

From知呼:http://www.zhihu.com/question/26006703

我入门CV时清华的朋友给的资料,帮助十分大!十分适合新手入门!
我是本科EE入门的,所以应该没有底子比我差的了。

0、Andrew Ng的机器学习前四章的内容(线性回归与逻辑回归)
英文能力足够推荐英文版:openclassroom.stanford.edu
(中文版对应网易公开课v.163.com/special/openc)

1、CMU Advanced Introduction to Machine Learning PPT: cs.cmu.edu/~epxing/Clas

这是一门Machine Learning课程中讲到CNN的部分

2、CAFFE: caffe.berkeleyvision.org

CAFFE是一个常用的deep learning的软件工具,其页面上有deep learning的tutorial材料,同时想要深入了解具体实现的话可以直接阅读源代码

3. UFLDL: ufldl.stanford.edu/wiki

这是我做computer vision的同学推荐的学习deep learning在CV中应用的tutorial

 

 

2018-07-03 02:45:11 valada 阅读数 23674

课程简介

本课程共分为三个部分:基础理论、深度神经网络基本结构以及网络优化与实践。本课程采用了理论结合实践的讲解方式,方便读者边学边练,理解巩固。在解释相关概念时,作者尽力使用简单、直观、可实现的公式语言描述,尽量避免使用图形、比喻和白话等容易使初学者误入歧途的描述方式。读者在初学过程中可能会不太习惯,但这对于建立知识体系是十分重要的。

课程实践部分使用 TensorFlow 作为机器学习库,以帮助读者快速实现一些深度学习算法,从而建立信心,这种自信是任何学习过程都需要的。但机器学习库只是辅助,作者希望读者在学完本课程后,能够利用数学公式而非库函数的方式实现深度学习功能。这很难,但并不是不可能。

作者介绍

如是,算法工程师。主要从事数值模拟、智能算法研发工作。擅长高性能计算、物理、机器学习领域。曾参与设计自然灾害智能监控预报系统。

课程内容

导读:课程介绍和学习方法

无人工不智能

经常会被问到“深度学习与机器学习或者数据挖掘有什么关系?”答案很简单:没有区别。现如今,人工智能如此火爆,好像其他机器学习算法已经没有了立足之地。但事实并非如此,每一种机器学习算法都具备完成所有机器学习任务的潜力,只是需要很复杂的特征工程。深度学习以及其他所有的机器学习算法本质上都是一种“拟合”机制,在大量的数据基础之上总结出可用的规律。而这些数据是需要人来提供的,所以说机器学习过程就是让机器学习人类经验的过程。而这个过程与数据有关,与方法无关。

解决深度学习问题有两种思路。一种思路是基于理论的,或者说基于规则;第二种是基于数据的,从数据中学习规则。举个例子,对于图像去噪问题。我们可以通过傅里叶变换与低通滤波来减少图形噪声,这是基于理论的而且不需要提供数据。另外,还可以给定有噪声和没有噪声的图像,让机器自动去学习一个可用于降噪的系统。下图是Zhang在2017年使用深度神经网络完成的图像去噪工作(文献[1])。

enter image description here

enter image description here

所有的机器学习都依赖于有效数据的累积,这离不开人工。“无人工不智能”的另外一层意思是很多工作其实并不适合使用“机器学习算法”去完成,比如寻找两点之间的最短路径,这是传统算法的范畴。作为一个“算法”工程师,眼光不应该局限于机器学习的领域。我们最终的目标是准确、高效地解决问题,因而不必纠结于使用哪种方法。

为什么需要深度学习

很多年前机器学习很强调“做特征”。但是随着数据的不断累积,有了另外一种选择,就是构建一个足够复杂的可训练系统,让系统自身去完成特征的学习过程。深度学习就可以完成上述过程,它简化了特征工程的难度。

传统的机器学习建模方式所得的曲面(线)复杂度不足,无法用来拟合数据。

enter image description here

传统机器学习算法由于可训练参数数量的限制,导致它所能学到的特征有限,在一些情况下可能无法形成足够复杂的曲面,因此它十分依赖特征工程去增加复杂度。而深度学习可以形成足够复杂的曲面用于拟合特征,换一种说法就是深度神经网络具有强大的表达能力。这种特征的习得是以海量数据为基础的。因此在数据量较少时使用深度学习很难得到理想的结果。

深度学习能做什么

机器学习能完成的任务,深度学习都可以完成。深度学习尤其擅长处理图像识别、物体检测、自然语言翻译、语音识别和趋势预测等,这些任务本身比较复杂,需要一个相对复杂的系统去完成拟合任务,在这里就不展示了。下面列举深度学习在其他方面的应用:

enter image description here

谷歌的 Magenta 项目是深度学习在音乐以及艺术上的一些探索。目前利用深度学习已经完成了一些简单的音乐和漫画创造工作。下面是 Magenta 项目中画漫画的例子:

enter image description here

深度神经网络还可以完成图像风格迁移的任务:

enter image description here

同样,使用神经网络可以完成图像的超分辨率采样等任务:

enter image description here

上图是利用 Keras-js 官网的预训练模型进行超分辨采样,左侧是使用二次样条插值得到的图像,右侧是使用神经网络得到的图片。不难看出,深度神经网络在进行超分辨采样的过程中可以保留更多细节。

如何学习

歧途之上的零基础

“零基础入门”很多,一些机器学习课程也喜欢用这种诱人的名字。这是十分不负责任的做法。任何一门学科的学习,都需要付出时间和精力,更何况是涉及很多理论知识的机器学习。如果通过图形和比喻来介绍机器学习,那大概只能算是科普。比如,很多零基础入门课都喜欢用下面这样的图:

enter image description here

卷积神经网络本身只需要一个公式就可以很好地描述了,简单明了而且可直接用程序实现。但上面这张图不仅未解释任何问题,反倒增加了学习者的困惑。学习者以为了解了卷积网络,实践时却发现只是冰山一角。科普很久还需要从头学起,不但没有走捷径反而浪费了时间。

学习本身并不难

深度学习作为一门学科,需要一定的基础,要想掌握它也需要投入一些时间,但它并没有你想象得那样难以掌握。如果以实现为导向的话,仅需要熟悉一些矩阵、导数的知识就可以完成深度学习的网络搭建工作了。这里的搭建指的是不借助任何机器学习库完成的深度学习的网络搭建。这样一来,学习周期自然会比较长,学习过程中也会遇到一些障碍,但并不是难以逾越的。

下面是我在学习过程中总结出的一些难点:

  • 多维函数和优化
  • 概率论
  • 深度学习中的贪心与动态规划思想

从函数角度来看,深度学习是一个多维函数的问题。多维函数使用过程中涉及了矩阵(张量)相关计算,是程序实现过程中的难点。概率论相关内容一直是机器学习中最难以理解的部分,但它是基础,必须要掌握。贪心算法是深度学习中最基本的思想之一,它植根于每个实现过程中。有的时候你甚至都没意识到那是一种贪心策略,最明显的例子就是“梯度下降法”。克服上述障碍之后就可以完整地实现深度神经网络了。

系统的学习方法

对于深度学习而言,需要系统学习的内容包括:

  • 矩阵与函数
  • 最优化理论
  • 概率与统计

其他补充知识包括但不限于:

  • 现代几何
  • 流形
  • 传统算法
  • 高性能计算

学习过程中尽量以公式角度来理解和看待问题,进而形成一种自洽的理解方式,这是非常重要的。尽量避免使用图形理解与分析问题,因为那样更像是科普而不是学习。

软件环境

本课程使用的软件环境是 Python 3版本,这里推荐安装 Anaconda 最新版本。包含了学习过程中必须的库:

  • numpy
  • scipy
  • matplotlib

TensorFlow 需要自行安装,这里推荐使用最新版本。如果不熟悉 Python 环境,那么推荐的安装方式为:

pip install tensorflow

如果有英伟达的 GPU 的话,可以安装 GPU 版本:

pip install tensorflow-gpu

这种安装方式的一个缺陷在于,库函数没有使用 CPU 的 SIMD 指令集进行优化,因此自己编译成了更好的选择,这个过程可以参考官方文档。

课程结构

本课程分为三个部分:

  • 基础理论
  • 深度神经网络基本结构
  • 网络优化与实践

基础理论包括:

  • 线性代数与矩阵
  • 多维函数与优化
  • 概率与概率模型
  • 神经网络建模与优化

深度神经网络基本结构包括:

  • 卷积神经网络
  • 循环神经网络
  • 循环神经网络结构与文本损失函数

优化与实践包括:

  • 网络参数优化
  • 网络模型优化
  • 图片识别器
  • 语音生成器

希望通过本课程的学习,读者能够对深度神经网络有一个具体而微的了解,甚至可以在不借助任何机器学习库的情况下直接编程实现。这很难,但并不是不可能。

参考文献

[1]Zhang K, Zuo W, Chen Y, et al. Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoising[J]. IEEE Transactions on Image Processing A Publication of the IEEE Signal Processing Society, 2017, 26(7):3142-3155.

第01课:线性代数

矩阵与符号

矩阵是深度学习中最基本的概念之一,深度学习的建模以及优化实现都是围绕矩阵进行的。矩阵概念映射到计算机科学中就是数组:

${A}{mn}=\begin{bmatrix}a{11}&\cdots&a{1n}\\vdots&\ddots&\vdots\a{m1}&\cdots&a_{mn}\end{bmatrix}\in \mathbb{R}^{m\times n}$(1.1)

1.1式中 $\mathbb{R}^{m\times n}$ 代表矩阵为 m 行 n 列的实数矩阵。矩阵可以写为 ${A}$ 或 $[a_{ij}]$。对于我们所接触的机器学习问题而言,矩阵内的数值通常为实数。

约定求和

矩阵的点乘、向量内积可以用约定求和来表示:

$(A{mn}\cdot B{np}){ij}=\sum{i=1}^n a{ik}b{kj}\rightarrow a{ik}b{kj}$(1.2)

相同指标 k 代表求和,此时可以省略求和符号。相似的向量相乘可以表示为:

$\vec{a}\cdot \vec{b}=aibi$

约定求和是公式推导过程中非常方便的工具,可以简化公式的书写。

矩阵分解

一个向量可以分解成多个向量相加的形式:

$\vec{v}=a1 \vec{e1}+\cdots+an \vec{en}$(1.3)

对于一组不全为0的向量而言,如果其中的任意一个向量都不能由其他向量以1.3式的方式表示,那就代表这组向量线性无关或这组向量是线性独立的。

线性独立的概念很重要。如果几个向量线性不独立,即某个向量可以用其他向量表示,那么这个向量就没有存储的必要了。这是信息压缩最原始的思想。如果对1.3式中等式右边向量 $\vec{e}$ 加以如下正交约束:

$\vec{e}i\cdot \vec{e}j=\delta_{ij}$(1.4)

1.4式中所描述的向量之间是互相正交的关系,并且是单位向量:

$\delta_{ij}={\begin{matrix}1&i=j\0&i\neq j\end{matrix}$(1.5)

那么 e 就组成了 n 个正交的单位基向量。这是在空间中所用到的概念。当然并不是所有坐标基向量都是正交的,同样也未必是单位向量。

压缩概念初探

对于一组向量 $V=(v1,\cdots,vm)$ 来说,可以将其中每个向量都用其他多个向量以加权求和的方式表示:

$v{ki} = a{kj} e_{ji}$(1.6)

其中 $e{ji}\rightarrow(\vec{e}j)i$ 代表第 j 个单位向量的第 i 个元素。同样, $v{ki}$ 代表第 k 个向量的第 i 个元素。由1.2式可以看出,上式可以表示为矩阵相乘的形式:

$V{mn}=A{mk}\cdot E_{km}$(1.7)

1.7式中向量 v 组成的矩阵 V 可以分解为两个矩阵 A、E 的乘积表示。如果 m>k,也就是说我们可以用小于 m 个数字来表示矩阵 V,这是一个数据压缩过程。此时 A 可以代表矩阵 V 的特征,如果要恢复 V 的话还需要保存 E。但是机器学习中通常只需 A 就可以了。

从这里例子中可以看到,我们可以对矩阵进行变换,从而达到信息压缩的目的。这个过程中需要的是求解矩阵 E。如果 $W=E^T$,则信息压缩方式可以写为:

$V{mn}\cdot W{nq}=A_{mq};n<q$(1.8)

W 称为变换矩阵。这是线性变换过程。

第一种线性变换:特征值分解

特征值分解是最简单的一种矩阵分解形式,也是矩阵算法中最常用的。特征值分解是对于方阵而言的:

$A_{nn}=E\cdot\Lambda \cdot E^{-1}$(1.9)

特征值分解中 E 矩阵是正交矩阵,这意味着:

$E^{-1}=E^T$(1.10)

此时,1.8式中的变换矩阵 W 即为 $E$。

第二种线性变换:奇异值分解

特征值分解作为矩阵的分解方法,最主要的缺点在于它只能应用于方阵。对于非方阵情况下的矩阵分解算法,比较有代表性的就是奇异值分解(SVD):

$A_{mn}=M\cdot\Gamma \cdot V$(1.11)

SVD 的求解过程可以用特征值分解进行,这就需要将矩阵转换为方阵:

$B_{nn}=A^T\cdot A=E\cdot \Lambda\cdot E^T$(1.12)

对 B 进行特征值分解,利用对应元素相等可以得到如下关系:

$\begin{matrix}V=E^T\\Gamma=\sqrt{\Lambda}\end{matrix}$(1.13)

根据1.11式可以得到 M 为:

$M=A\cdot V^T \cdot \Gamma^{-1}$(1.14)

由此三个矩阵已经完全确定,因此可见矩阵的特征值分解是 SVD 的基础(还有其他算法可以实现)。同时可以看到,矩阵 A 在变换为矩阵 M 的过程中,依然相当于对矩阵 A 进行的一次线性变换

第三种线性变换:字典学习

对于 SVD 分解而言,其有一个非常大的问题就是约束过于严格,比如矩阵 M 与 V 为正交矩阵。这就导致了在计算过程中,为了满足分解条件,信息压缩的质量可能会降低。因此产生了另外一个更加宽泛的约束方式:

$A{mn}\approx M{np}\cdot N_{pm}$(1.15)

假设条件是 N 足够稀疏,此时 M 就称为字典。此时弱化了正交性假设,因此所得到的信息压缩效果会更加出色。

实践部分

矩阵定义与计算

在 Tensorflow 中最简单的矩阵乘法运算可以写成如下形式:

#矩阵乘法#引入库import tensorflow as tfimport numpy as np#定义常量并用 numpy 进行初始化a1 = tf.constant(np.ones([4, 4]))a2 = tf.constant(np.ones([4, 4]))#矩阵乘法a1_dot_a2 = tf.matmul(a1, a2)#定义会话用于执行计算sess = tf.Session()#执行并输出print(sess.run(a1_dot_a2))

这是通过常量进行定义的,一般的函数库是按顺序执行的,比如 numpy 中。而 tensorflow 在运行过程中,我们一直都只是在描述计算,直到定义了会话并运行之后才真正开始计算。这样一来,就可以用较慢的 Python 来描绘计算过程,而需要快速计算时,利用会话(session)可以实现 Python 所描述的计算。

Python 中用得最多的是变量:

#矩阵乘法#引入库import tensorflow as tfimport numpy as np#定义变量并用 numpy 进行初始化a1 = tf.Variable(np.ones([4, 4]))a2 = tf.Variable(np.ones([4, 4]))#矩阵乘法a1_dot_a2 = tf.matmul(a1, a2)#variable 需要初始化init = tf.global_variables_initializer()sess = tf.Session()sess.run(init)print(sess.run(a1_dot_a2))

变量是在计算过程中可以不断变化调整的量,是可求导的量,这对于机器学习来说是比较重要的,后面会提到。这里需要注意的是用到变量时需要对变量进行初始化,否则会出错。

上面说到我们用 Python 来描绘计算过程,称为计算图。在描述之后,很难对变量进行外部输入。因此这里引入了 placeholder,用于从外部接收数据:

#矩阵乘法#引入库import tensorflow as tfimport numpy as np#定义变量并用 numpy 进行初始化a1 = tf.Variable(np.ones([4, 4]))#定义 placeholder 用于从外部接收数据a2 = tf.placeholder(dtype=tf.float64, shape=[4, 4])#矩阵乘法a1_dot_a2 = tf.matmul(a1, a2)#variable 需要初始化init = tf.global_variables_initializer()sess = tf.Session()sess.run(init)# 需要给 placeholder 提供数据print(sess.run(a1_dot_a2, feed_dict={a2:np.ones([4,4])}))

想象一下,我们在运行过程中只需不断地从外部输入 c2,就可以持续地获取输出 a1_dot_a2,这个过程对于机器学习输入样本来说,非常简便。

小提示:注意格式检查,在计算过程中,float 64 与 float 32 放在一起使用会产生错误。

[help me with Html]

第02课:多元函数和优化
第03课:概率问题
第04课:基础数学概念扩展
第05课:库函数的补充
第06课:卷积神经网络
第07课:循环神经网络(上)
第08课:循环神经网络(下)
第09课:神经网络辅助结构
第10课:网络优化
第11课:神经网络模型实践:图片分类器
第12课:神经网络模型实践:图片分类器修改

阅读全文: http://gitbook.cn/gitchat/column/5b1e313c294fb04d7c22b3d1

深度学习入门路线

阅读数 175