深度学习资料

开源库

  1. Tensorflow:无需解释
  2. Keras:使用起来非常方便,几十行代码就能达到5年前世界顶级的效果
  3. tensorflow-model: 维护着tensorflow(最新版本)实现的业界比较流行的model,如何看paper觉得还不够具体,该repository提供了一个好的参照对象
  4. CMU OpenPose:  实时识别人体姿势的开源库,例如实时识别人的身体,手脚等。感兴趣的可以研究下,可以基于该工具做个什么创业项目也是可能的
  5. DeepSpeech:开源Speech-2-Text框架
  6. Deep Voice Conversion:使用深度学习进行不同人的声音转换
  7. Seq2Seq:Google Seq2Seq模型的Tensorflow实现
  8. FaceNet:人脸识别的开源库
  9. Face_Recognition:人脸识别库, 基于DLib开发,号称最易用的人脸识别库, 包括 Face Detection, Face Recognition等新版的DeepFakes的人脸定位及人脸特征抽取就基于该库
  10. TTS的WaveNet实现:用Tensorflow实现的Text2Speech的WaveNet实现
  11. Keras-rl:常见RL算法的python实现
  12. Fashion-Mnist:公开的时装分类的数据集:学术算法大牛固然牛叉, 但后来大家发现学术界还有一种牛法,叫另辟蹊径搞数据集,例如FeiFei,Li 搞得ImageNet,学术上引用次数暴多,简直就是增粉利器。 Fashion-Mnist感觉就是类似的思路

Courses

  1. dlsys-course: 华盛顿大学的Deep Learning教程,包含如何搭建,优化深度学习系统,包括上层算法和底层GPU性能优化等,github上有教程,也有代码
  2. Stanford CS20SI:Tensorflow for Deep Learning Research:Stanford关于Tensorflow for Deep Learning的课程;有具体课程示例代码参考
  3. Stanford CS231n: Convolutional Neural Networks for Visual Recognition,原视频在youtube上需要翻墙,国内也可在网易云课堂上观看CS231n
  4. Oxford NLP Lectures:Oxford Deep NLP Lectures,介绍NLP,特别是NN在NLP领域的使用

Book

  1. Deep Learning:Goodfellow, Ian, Yoshua Bengio, Aaron Courville, and Yoshua Bengio. Deep learning. Vol. 1. Cambridge: MIT press, 2016. 厚块头,偏理论
  2. http://neuralnetworksanddeeplearning.com/ neural network and deep learning
  3. Deep Learning with Python 》: Keras的作者写的书,很多使用Keras示例和项目。虽然是英文版,但是读起来很流畅。可以一边看着PDF一边调试代码。强烈推荐
  4. Hands-On Machine Learning with Scikit-Learn and TensorFlow》:前一半主要介绍sklearn,后一半主要介绍tensorflow。感觉sklearn介绍比较详细, tensorflow的内容偏少
  5. Building Machine Learning Projects with TensorFlow》:tensorflow使用介绍,有描述有代码
  6. Getting Started with TensorFlow – Giancarlo Zaccone》:tensorflow使用介绍,有描述有代码,而且比较简短
  7. tensorflow cookbook》:tensorflow使用介绍,虽然叫cookbook,不过块头也没那么厚
  8. PyTorch Tutorials:PyTorch 的使用代码示例,没细看,但应该对学习PyTorch有很好的帮助
  9. Tensorflow程序代码框架:一个简单的组织TF代码框架+规范

网站

  1. NIPS 2017资料: NIPS 2017的资料,包括视频,PPT/PDF,Tutorials,各种当前发展的技术,趋势的演讲和讨论,值得拥有
  2. ImageNet:Image-Net官网
  3. CVPR 2015: CVPR 2015,有比较多的优秀论文和视频,包括 GoogLeNet
  4. VGG: VGG研究的成果,包括blog, paper, pre-trained model下载
  5. The Data Science Blog: 比较详细介绍了CNN的工作原理,另外还有较多数据分析技术的介绍
  6. awesome-datascience: 非常全面的Data Science学习资料,还包含部分机器学习,相关比赛等
  7. cheatsheets-ai:有很多关于机器学习的工具介绍,其特点是将每个工具的主要技术和技术点都做成png或者pdf类似的大纲。的确是cheatsheets,方便查阅;也适合用来check自己知识点的完备性
  8. Reinforcement-Learning资料:比较全的Reinforcement-Learning的教程,包括教程,相关书籍,示例代码,Paper等RL方面的很多资料,方便查阅
  9. https://www.deepfakes.club/ :  deepfakes club,很多deepfakes的资料。deepfakes能催生规模不小的黑产
  10. Quick Draw:Google发布的手绘数据集, 很多有意思的应用或者论文都基于该数据集,包括之前比较火的微信小程序‘猜画小歌’

有意思的应用

  1. https://www.deepfakes.club/ :  deepfakes club,很多deepfakes的资料。deepfakes能催生规模不小的黑产
  2. deepfakes/faceswap:深度学习换脸, 基本的思路是先定位两组图片中的face, 一组作为content(保留表情特征, 例如面部是微笑, 哭泣, 咆哮等,以及原图的剩余内容), 另一组作为style(替换着的脸部内容),另外考虑lighting和平滑。 之后将content, sytle,  lighting,  smooth结合起来考虑作为优化目标进行优化。 具体参见:《deepfakes关键技术详解》
  3. Neural-Style:神经网络进行图像变换,能够得到较多风格奇异的图片。融合两张照片,  使用VGG抽取特征, 一张的特征作为content代表图片内容, 另一张抽出的特征使用Gram Matrix进行计算作为Style,之后进行融合, 使用随机的图片最小化和content, style表示的偏差;具体参见《Neural-Style关键技术详解》

经典论文

经典CNN结构
  • LeNet-5:LeCun Y, Bottou L, Bengio Y, Haffner P. Gradient-based learning applied to document recognition. Proceedings of the IEEE. 1998 Nov;86(11):2278-324.
  • GoogLeNet: Szegedy C, Liu W, Jia Y, Sermanet P, Reed S, Anguelov D, Erhan D, Vanhoucke V, Rabinovich A. Going deeper with convolutions. Cvpr. GoogLeNet的原版内容
  • Residual Net:He K, Zhang X, Ren S, Sun J. Deep residual learning for image recognition. InProceedings of the IEEE conference on computer vision and pattern recognition 2016 (pp. 770-778). Residual Net介绍
  • Inception BN:Ioffe S, Szegedy C. Batch normalization: Accelerating deep network training by reducing internal covariate shift. arXiv preprint arXiv:1502.03167. 2015 Feb 11.
  • AlexNet:Krizhevsky A, Sutskever I, Hinton GE. Imagenet classification with deep convolutional neural networks. InAdvances in neural information processing systems 2012 (pp. 1097-1105).  模型下载AlexNet FineTuning
  • U-Net: Ronneberger O, Fischer P, Brox T. U-Net: Convolutional Networks for Biomedical Image Segmentation[C]// International Conference on Medical Image Computing and Computer-Assisted Intervention. Springer, Cham, 2015:234-241. U-Net用于语义分割
  • Lin, Min, Qiang Chen, and Shuicheng Yan. “Network in network.” arXiv preprint arXiv:1312.4400 (2013).  论文中主要提出了两个重点:一是在传统conv filter的基础上再叠加multiple layer perception,用于增加低层的抽象能力(避免低层需要使用更多filter来对非线性可分的特征进行刻画); 二是提出取代传统conv网络中最后的Full Connection(传统FC参数较多,且很难和分类的categories的置信度对应起来)而提出的Global Average Pooling让每个feature map和每个categories关联, 相当于每个feature map的线性组合可以作为category的confidence,增加网络的可解释性,同时减少模型参数
  • Goodfellow, Ian J., et al. “Maxout networks.” arXiv preprint arXiv:1302.4389 (2013).  maxout network提出的原论文,相当于在convolution后,对各feature map进行参数化的max pooling(对比network in network相当于使用的是conv1d进行参数化pooling)
RNN/LSTM/GRU
  • Understanding LSTM Network: LSTM工作原理的详细介绍
  • Auli M, Galley M, Quirk C, et al. Joint language and translation modeling with recurrent neural networks[J]. American Journal of Psychoanalysis, 2013, 74(2):212-3.
  • Kalchbrenner N, Blunsom P. Recurrent continuous translation models[C]// 2013.
  • Cho K, Van Merrienboer B, Gulcehre C, et al. Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation[J]. Computer Science, 2014.
  • Sutskever I, Vinyals O, Le Q V. Sequence to Sequence Learning with Neural Networks[J]. 2014, 4:3104-3112.
  • Bahdanau D, Cho K, Bengio Y. Neural Machine Translation by Jointly Learning to Align and Translate[J]. Computer Science, 2014.
  • Zhu, Lingxue, and Nikolay Laptev. “Deep and confident prediction for time series at uber.” Data Mining Workshops (ICDMW), 2017 IEEE International Conference on. IEEE, 2017.  Uber使用的时间序列概率模型
  • 图像相关

    • Neural-Style:Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. “A neural algorithm of artistic style.” arXiv preprint arXiv:1508.06576 (2015).
      将图像区分为content和style两类, 使用深层次卷积层提取content图像和style特征,去逼近content图像的深层卷积特征(相当于图像的语义表示),同时使用深层次卷积层的Gram Matrix抽取Style图像的特征进行Sytle的表示,loss = alpha*loss_content+belta*loss_style拟合最终图像
      代码参见Neural-Style. 上述的深层卷积特征抽取使用VGG模型进行
    • 另一种Neural-Style: Li, Chuan, and Michael Wand. “Combining markov random fields and convolutional neural networks for image synthesis.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.  类似的Neural-Style方法: 新图像的loss = alpha*loss_content + belta*loss_style + gama*.regularity。其中loss_content使用深层卷积网络抽取的特征(语义特征)与最终图像对应的特征的差值表示;loss_style为使用k*k*c(k大小,c为channel)大小的patch将目标图像和原style图像进行划分,并进行对应位置的patch相似度计算找出最相似patch后计算sytle偏差;regularity为像素点之间的平滑。综合loss_content, loss_style, regularity后得到最终图像
    • deepfakes:Korshunova I , Shi W , Dambre J , et al. Fast Face-swap Using Convolutional Neural Networks[J]. 2016.deepfake方法:主要思路为使用CNN自动由content和style两类图片合成新的图片。同时考虑lighting,smoothing。content主要指面部表情,一般使用各层网络的高层features进行表示,style为想要替换成的脸,之后对content, style,smoothing,lighting的表示进行加权..Note.具体工程实现的时候,均为1,使用Dlib定位并抽取脸部对应的轮廓点。2,进行affine transform对齐脸部。3,使用训练出来的模型,结合content(pose)和style,生成新的face; 4, 进行仿射变换将脸部还原为原来的角度;5,将脸部粘合回原图片背景中
    • deepfakes2:Li C , Wand M . Combining Markov Random Fields and Convolutional Neural Networks for Image Synthesis[C]// Computer Vision & Pattern Recognition. IEEE, 2016.另一个faceswap方法
    • sketch rnn drawing: Ha D , Eck D . A Neural Representation of Sketch Drawings[J]. 2017. google猜画小歌中的技术,进行自动作画

    NLP

    Bengio Y, Ducharme R, Vincent P, et al. A neural probabilistic language model[J]. Journal of Machine Learning Research, 2003, 3(6): 1137-1155.  用神经网络的方法使用词向量解决curse of dimensionality:相似的词有相似的词向量,对于未见过的sequences也可以利用词向量的相似性判定是否合理,更具有泛化性。具体方法为构建神经网络,先将词向量化,输出层为大小为|V|的softmax,对P(Wt|W1~t-1)进行建模,训练的过程即可得到每个词对应的向量。具体参见论文及Note.

    Collobert R, Weston J. A unified architecture for natural language processing:deep neural networks with multitask learning[C]// International Conference on Machine Learning. ACM, 2008:160-167.  使用深度学习框架,对多个NLP supervised任务同时进行训练进行参数共享,共同提升效果,能够解决传统方法过多依赖人工特征,以及过于task specific而无法参数共享的短板。具体做法为:1,使用wiki语料unsupervied的语言模型训练得到word representation作为词向量的初始值,之后对多个NLP任务进行jointly-training,仅最后一层为task-specific。论文中提到的如何为word设计多种物理含义的embedding方法在ETA领域也值得借鉴。Note.

    Chung J, Gulcehre C, Cho K, et al. Empirical evaluation of gated recurrent neural networks on sequence modeling[J]. arXiv: Neural and Evolutionary Computing, 2014. 对传统的tanh RNN,LSTM和GRU在多个数据集上进行评测。具体方法为,选择多个数据集,之后经过设定后,限定三种方法的训练参数量基本一致的情况下进行训练收敛速度和效果的对比。主要的结论为:LSTM&GRU明显好于tanh RNN。LSTM和GRU的表现各有千秋,在不同数据集合均可能胜出,并没有明显的结论证明GRU优于LSTM。Note.

    Le Q V , Mikolov T . Distributed Representations of Sentences and Documents[J]. 2014. word2vec。仍然是对P(w|context(w))进行建模,主要的思路仍然是使用dense vector对word进行表示,构建Huffman树,按照语料中词出现的频率进行编码,之后对于语境中的词对P(w|context(w))进行建模,内部将从sum(context(w))表示的向量,对Huffman数中到w叶子节点的Path的每一步进行二分类,分错的cost作为loss更新Huffman树节点参数及context(w)代表的各词的representation。网上博客:《word2vec中的数学原理》讲解的较为清楚。Note.

    Wang Z, Fu K, Ye J, et al. Learning to Estimate the Travel Time[C]. knowledge discovery and data mining, 2018: 858-866.该论文主要适用于ETA领域,将其放在该处的原因是文中引入Recurrent Network的思路主要来自于NLP领域:传统的ETA要么适用Additive的link+cross的累加方式进行拟合,或者适用浅模型(XGBOOST,FM等)方式拟合,这些方式的缺点是信息适用不完全,因为ETA需要使用大量时空维度的路网Topology关系,同时使用的特征既有dense特征,又有sparse特征,故文中使用GooglPlay App推荐中的W&D方式,充分使用dense+sparse特征的同时,引入Recurrent Neural Network对空间依赖的link序列进行建模。文中针对不同物理含义特征,使用不同网络结构进行jointly learning的思路值得学习.Note.

    MAP

    Multistep Speed Prediction on Traffic Networks: A Graph Convolutional Sequence-to-Sequence Learning.Zhengchao Zhanga, Meng Lia,b, Xi Linb, Yinhai Wangc,a, Fang Hed,文章的新颖之处在于:1,使用seq2seq的方式进行多步路况预测;2,为了同时对空间topology关系进行建模,使用了图卷积方式,对上下游多步的link关系进行了融合,而不是对单一link速度进行拟合(基于Rule-based的方法会使用规则进行多个link的速度融合);3.引入attention提升效果同时在特征层面,结合了准实时特征以及历史特征.Note.

    Asghari M , Emrich T , Demiryurek U , et al. Probabilistic estimation of link travel times in dynamic road networks[J]. 2015..论文创新点:将物理世界路网的通行速度建模为正态分布,并结合历史信息进行拟合,即可给出给定路径规划道路的ETA及置信度,以便选取的最优路线不仅要考虑ETA是否最快,还可以结合置信度,挑选综合ETA+置信度的最优路径。思路相对简单直接,但话糙理不糙,具有较强的实施性

    Newson P , Krumm J . [ACM Press the 17th ACM SIGSPATIAL International Conference – Seattle, Washington (2009.11.04-2009.11.06)] Proceedings of the 17th ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems – GIS \”09 – Hidden Markov map matching through noise and sparseness[J]. 2009:336.内容:个人比较喜欢的一篇文章:使用隐马尔科夫模型,对map-matching问题进行建模,将匹配概率分解为实用正态分布的观察概率(GPS点到link投影点)及使用指数分布的转移概率(球面距离及route planning)的组合,之后实用维特比方法求最优解。论文发表后的数年,各大公司的地图匹配算法均基于该思路或实现。简单实用Note.

    Zheng Y . Map-matching for low-sampling-rate gps trajectories[C]// Acm Sigspatial International Symposium on Advances in Geographic Information Systems. DBLP, 2009.HMM Map-Matching的一个变种,相当于在最终概率=观察概率*转移概率的基础上,引入了限速信息:假设真实的行驶道路大概率遵守道路限速信息(通过候选路线的行驶速度和候选路线的限速的cosine得到新的系数引入概率计算公式),通过该论文可以得到结论,map-matching应该使用机器学习综合多种特征计算概率,而不仅仅是转移概率和观察概率..

    Zheng Y . Trajectory Data Mining: An Overview[M]. ACM, 2015. 内容比较全,可以作为trajectory分析的目录,了解各个组件

    CTR

    Facebook:Practical Lessons from Predicting Clicks on Ads at Facebook[J]. 2014:1-9.Facebook ctr预估模型,也算是业界经典了。主要思路为:1,使用GBDT进行特征抽特征(进行自动特征组合);2,使用LR对GBDT抽取的特征(规则组合)进行权重学习。3,一般训练的方式为先将GBDT训练好,之后固定树模型并对叶子节点进行编码作为LR特征训练LR。该方式在业界有较为广泛的应用,例如滴滴路况预测中,能够提升有效准确率2%,而美团ETA应用中预估时间的MAE能够下降3.4%(与论文中3%的下降接近).;同时文中也对各类特征的重要性进行了分析;同时文中对影响CTR模型效果的几个因素进行了分析:1,模型的自动更新很重要:模型一周不更新,效果下降1%左右,考虑到性能,甚至可以gbdt模型更新频率相对低,lr更新相对快;2,对于gbdt+lr模型,historical特征较为重要(top 10特征均为historical特征),但contextal特征对cold start较为重要;3,参数更新的schedule方法中,per-coordination方式明显好于其他方式;4,在display ads中,训练时可以进行负采样,但后续线上使用的时候需转换回原分布:q=1/(p+(1-p)/w),其中q为最终ctr值,p为采样后模型预估值,w为负采样比例..Note..

    Google:Mcmahan H B , Holt G , Sculley D , et al. Ad click prediction:a view from the trenches[C]// Acm Sigkdd International Conference on Knowledge Discovery & Data Mining. ACM, 2013.Google 2013年ctr预估算法,文中主要描述了使用FTRL online learning方法获取稀疏性,该方法能够在稀疏性以及准确性上得到均衡提升。文章的主要贡献有:1,在FTL方法中加入L1正则获取稀疏性;2,使用per-coordination方法加速训练的收敛;3,Google,Facebook出的论文中都会有很多解决工程问题的讨论,该论文也不例外:例如使用probablistic inclusion或bloom filtering方式概率性处理新特征的加入;使用13位对内容进行编码节省内存(权重几乎都集中在(-2.0,2.0)之间).更为重要的是论文中直接有伪代码可供参考.Note

    GooglePlay App推荐:Cheng H T , Koc L , Harmsen J , et al. Wide & Deep Learning for Recommender Systems[J]. 2016.Wide@Deep方法。使用Wide线性部分作为Memorization,对历史信息进行exploit,使用Deep部分,对特征进行自动的更高层次的组合与抽象(个人理解和NLP中的模式类似,Deep部分能够学习复杂计算,同时对特征进行组合并生成embedding)进行自动特征组合,并进行更高层次的泛化,相当于对训练数据中的信息进行explore。该方法同时解决了wide需要进行手动特征组合的缺点,以及Deep有可能过拟合的缺点;训练:进行Jointly training,其中wide部分使用ftrl训练,deep部分使用adagridadam进行训练...Note…P.S. 目前Wide&Deep已经作为一个标准Framework解决分类和回归问题,例如滴滴ETA模型,我们使用Wide&Deep&RecurrentWDR方法进行ETA预估

    Kaggle Criteo Ctr预估:3 Idiots’s Approach for Display Ads Challenge. KaggleCritero ctr预估第一名使用的方法,主要的思路为:1,使用GBDT对连续特征,以及出现频率极高的离散特征进行特征组合(类似于FB display ads ctr预估),组合出来的特征,结合离散化后的连续值特征,原有离散特征(共3类特征),使用FFM进行CTR预估,并在得到CTR值后对预估值进行Calibration(简单地加减一个固定值)

    Kaggle Avazu CTR预估:4 Idiots’s Approach for Display Advertising Click-through Rate Prediction. 另一个Kaggle上的display ads ctr prediction 比赛,冠军组使用的方法介绍中,有两个关键点:1,ensemble,目前已经成为competition的标配;2,feature engineering,文中使用了较多单独构造的feature,例如user /deviceid count,  hourly impression count; user installed app bagging,  user click action的编码等。最终获奖的模型为20个ffm的ensenbling

    2017 Huawei App Recommender Ctr Prediction:Guo H , Tang R , Ye Y , et al. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction[J]. 2017.华为App应用市场的推荐方法,基于Wide&Deep,区别在于两点:1,将Google的Wide部分的LR模型换为FM,用于学习特征交叉;2,2,不同于其他Deep的模型,FM和Deep部分使用的特征的Embedding是相同的,相当于low &hight order feature intesection都会反映到Embedding中在Wide部分和Deep部分进行共享,且训练速度和FNN(FM与训练V作为Deep Model Embedding参数初始化),PNN(Embedding和First Hiden Layer之间进行一次inner production,效果不错但增加了全连接规模导致训练较慢)要好。PS.在滴滴ETA模型中,我们就借鉴了DeepFM思路,不过其中的Deep部分会比较复杂,同时在最终的融合部分,增加了初始Additive ETA Model…..Note.

     

其他持续补充

  • Nair V, Hinton GE. Rectified linear units improve restricted boltzmann machines. InProceedings of the 27th international conference on machine learning (ICML-10) 2010 (pp. 807-814). 介绍了ReLU
  • Bell RM, Koren Y. Lessons from the Netflix prize challenge. Acm Sigkdd Explorations Newsletter. 2007 Dec 1;9(2):75-9. Netflix获奖算法的论文,主要提出多模型融合和现在大家经常用的改进SVD算法
  • Breiman L. Random forests. Machine learning. 2001 Oct 1;45(1):5-32.
  • Cheng, Heng-Tze, et al. “Wide & deep learning for recommender systems.” Proceedings of the 1st Workshop on Deep Learning for Recommender Systems. ACM, 2016.  Google App推荐系统中深度学习模型, Github上有开源。主要思路就是使用wide的线性模型捕捉根据历史信息得到的经验,同时使用深度学习对未看到过的特征进行交叉特征的exploration。深度部分会引入较多embedding;目前很多大厂中的系统都参照该模型来实现; 开原地址为:wide&deep source code

原文参见: 深度学习参考资料

更多也可参见:推荐系统参考资料