深度學習有哪些好玩的且易於實現的論文?

擅長python,theano,keras框架,求大神介紹一些新鮮的好玩的論文,註:畫畫的已經實現了。


不知不覺已經超過400贊了,最近終於有點時間來進一步增加點好玩的東西了,後面的內容不再歪樓了……(非深度學習的東西不放了……)

-1. 一個日文的博客——ディープラーニングで新しいポケモン作ろうとしたら妖怪が生まれた
講如何通過利用DCGAN生成Pockmon Go的寵物形象的文章。因為全是日文,我也不是特別懂日文,所以在這裡就不班門弄斧了。感興趣的自己看看吧? ?...

0. GitHub - Rochester-NRT/RocAlphaGo: An independent, student-led replication of DeepMind"s 2016 Nature publication, "Mastering the game of Go with deep neural networks and tree search" (Nature 529, 484-489, 28 Jan 2016), details of which can be found on their website https://deepmind.com/publications.html.

這個項目火遍大江南北啊,就是第三方根據AlphaGo的論文給出的實現。最近工作太忙沒空去看具體細節,底層用的是keras,具體的細節大家可以看看paper。另外今天發現了一個不錯的slide: http://www.slideshare.net/ShaneSeungwhanMoon/how-alphago-works

當初和李世石大戰的時候有很多」專家「都出來講過這篇paper,包括在下……簡單來說,AlphaGo的架構和傳統的圍棋AI相比並沒有傳統的創新,傳統的機器博弈的架構包括三部分:

  • 主體:AlphaBeta樹
  • 走子策略:某一步走哪最好
  • 局面靜態評估:當前誰更厲害

每當對方走出一步棋,我方就開始用走子策略判斷一批優秀的候選著法,然後我們開始YY對方,針對我方的每一著,給對方選出一批優秀的著法進行對抗,以深入分析我方走子的可行性。然而由於棋局的複雜性,我們無法演繹到比賽結束,於是到達一定深度後,我們對當前的局勢進行估計,然後根據這個分數反推回去,得到我們最好的招數,也就是下棋人常說的」下棋要多看幾步「。

那麼AlphaGo的厲害之處就在於,它把其中的第二、三項換成了CNN,CNN一來我們就得到了兩個好處:1)它有強大的非線性映射能力,算出來的招數很厲害;2)CNN的深度學習能力使得搞圍棋不用像過去搞圍棋的人一樣得花大量時間學圍棋了!這點也是當初DeepMind在介紹Atari時說過的,一招CNN,搞定無數領域的難題。曾幾何時,我們做博弈的寫評估函數,都得對某種棋有很深的認識,基本上得做到業餘中的佼佼者;現在有了CNN,你還是可以成為佼佼者,但是這方面的作用明顯沒有過去那麼有用了。

實際上現在大環境是什麼都可以拿深度學習的東西試試,所以用CNN搞圍棋不奇怪,但是能搞成這個事還是很牛的,而在這其中,訓練數據就很關鍵了。個人認為這其中最厲害的還是用增強學習訓練policy的部分,實際上這種完全信息的博弈天生就可以看作馬爾可夫決策過程(MDP),而增強學習又是解決MDP的一把好手。將AlphaBeta樹中的對手想像成Environment中一種看不見的力量,一個Agent的決策模型就自然形成了。至於後續的增強學習的細節,可以看論文中的介紹。

1. GitHub - jisungk/deepjazz: Deep learning driven jazz generation using Keras Theano!

這個是用LSTM寫jazz風格的旋律,也是蠻厲害的!跑起來很容易,庫用的是Theano,python人民的老朋友!相對比較簡單。

[我準備最近把它啃下來把一些細節分享到這裡!]

首先是music21這個庫,一個很強大的為音樂人士準備的庫(我以前怎麼沒發現這個庫,真心很贊!)

2. 最近AlphaGo太火了,於是乎推薦一個增強學習玩Flappy Bird的代碼:
GitHub - yenchenlin1994/DeepLearningFlappyBird: Flappy Bird hack using Deep Reinforcement Learning (Deep Q-learning).

親測有效,很有意思,相信它足夠好玩,也能激發大家的興趣

由於我之前用keras和caffe多一些,所以對tensorflow了解不多,這裡貼個中文的文檔供大家參考源代碼:
TensorFlow官方文檔中文版_TensorFlow中文教程_TensorFlow開發中文手冊[PDF]下載

[這裡補上小鳥的一些代碼總結]
flappy bird的程序主題上有兩個部分,一部分可以算作「預測」,就是根據模型指示具體的操作,一部分是「學習」,就是根據對局的信息調整模型。

整個項目的根基就是這個遊戲本身,在增強學習中可以看作是「Environment」,也就是能接收Action並反饋Next State和Reward的。作者使用了別人寫好的現成的程序,不過還是在此基礎上做了一定的修改,使遊戲能夠返回這兩個信息。對於Next State,則是下一個時刻的圖畫信息,對於Reward,主要就是能分了,穿過一對管子得一分,死掉得負分。

預測部分:作者採用了EE的策略,除了以模型進行判定之外,還以一定概率隨機操作。

學習部分:當數據集收集到一定數量後開始學習,對於非完結的狀態,要根據Bellman Equation進行Return的計算(Return和Reward有一定的差別)。然後將(state,action,return)扔給模型學習。

模型:CNN,具體的參數README講得很清楚。

總體來看這就是一個模仿Atari實現的項目,不過他一板一眼地把把Atari的經驗借鑒了過來,也做到不錯的智能效果,所以值得一贊。

我仔細地看了關於這個項目的介紹,發現他的思想和Deep Mind的另一個增強學習的項目很相近,那就是Atari遊戲。我找到了一個Github項目,沒有親測,後面有時間會做一下實驗:
GitHub - kuz/DeepMind-Atari-Deep-Q-Learner: The original code from the DeepMind article + my tweaks

兩個項目都是用CNN代替增強學習中的state-action-table,項目中的state就是當前的圖像(4幀),action就是用戶的操作(Flappy Bird就是點一下,昨天和同事聊同事還在說真正遊戲里每點一下的輕重是有區別的,我想這個AI應該沒有考慮這一點),由於這個空間十分大,我們用CNN來表示它,而學習的關鍵,也就是把這個表(模型)學習出來。

先簡單寫一下,回頭詳細地謝謝。

3.深度學習的在github有一個合集:
GitHub - kjw0612/awesome-deep-vision: A curated list of deep learning resources for computer vision
推薦一下,感興趣的話可以過一過

=======
亂七八糟的在下面,不刪了留著。。。
===========
感謝大家,超過了200贊,決定清明的時候再好好整理下這個回答!
1)增加了之前寫的水粉鉛筆畫的代碼(要代碼的朋友你們久等了……)
2)增加了一點關於增強學習的介紹……(基本上是懂的人一看就懂,不懂的……以後我看能不能寫個通俗的介紹)
============
終於有一個超過100贊的回答,成就感滿滿的,於是更新一下:
=====
以下是老回答
=================
謝邀。
推薦一個自己前段時間看過的:
Combining Sketch and Tone for Pencil Drawing Production
把一副圖像變成鉛筆水粉畫。絕對好玩,而且有代碼。
而且……我相信看懂這個項目會比一個深度學習的項目收穫更多。
另外,這一著也許可以拿來泡妹子……

非常抱歉沒有仔細看下面的評論,上面的網站裡面確實沒有代碼……
一個非官方的實現在這裡:GitHub - fumin/pencil: implementation of http://www.cse.cuhk.edu.hk/~leojia/projects/pencilsketch/npar12_pencil.pdf
希望之前沒找到的同學能夠看到我的修改。

===== 關於原問題的分割線 =====


更新一波:
分享一個自己的repo:https://github.com/sunshineatnoon/Paper-Implementations ,用pytorch 實現了一些比較經典的框架,大部分都是GAN相關的,也都是好玩的(?ˉ??ˉ??)

-------------- 以下是原答案 ------------1. Variational Auto Encoder (http://arxiv.org/abs/1312.6114)
paper裡面的數學很高深,然而實現起來crazy easy,就是encoder + decoder + kld loss + gaussian loss, 而且很好玩,可以生成人臉和MNIST。

  • Torch版本(GitHub - y0ast/VAE-Torch: Implementation of Variational Auto-Encoder in Torch7)
  • Tensorflow版本(GitHub - ikostrikov/TensorFlow-VAE-GAN-DRAW: A collection of generative methods implemented with TensorFlow (Deep Convolutional Generative Adversarial Networks (DCGAN), Variational Autoencoder (VAE) and DRAW: A Recurrent Neural Network For Image Generation).)
  • Caffe版本(https://github.com/cdoersch/vae_tutorial)
  • theano版本(Thanks@李丕績) https://github.com/lipiji/variational-autoencoder-theano

2. Generative Adversarial Networks(https://arxiv.org/abs/1406.2661)
這個模型真的十分intuitive和elegant, 兩個網路,一個「造假者」,一個「判別真假的警察」,互相博弈訓練,最後使得「造假者」可以以假亂真。

  • Tensorflow版本(GitHub - carpedm20/DCGAN-tensorflow: A tensorflow implementation of Deep Convolutional Generative Adversarial Networks)

以上兩個模型應該是generative model裡面的basic了,他們的各種變體也都很好玩,比如:

  • Draw(GitHub - ericjang/draw: TensorFlow Implementation of "DRAW: A Recurrent Neural Network For Image Generation")。
  • 前兩天還見到一個生成神奇寶貝的(ディープラーニングで新しいポケモン作ろうとしたら妖怪が生まれた),不知道為啥是日文,我也很懵逼,然而生成的圖還是很萌的:


就深度學習在語音、文字和圖像上的好玩的應用非常多啊!
先貼一個筆跡生成的。
對於小學生來說,不管考了多少次59分,不管寫了多少次檢討書,再也不用擔心媽媽給我簽名了:) 對, 我就是這樣一個陽光男孩。

I am a sunshine boy.

選擇對應的風格:

讓我們看看效果圖:

你就說溜不溜!

這是多倫多大學的項目,附論文和代碼,鏈接地址在 這裡 。

好了,有幫助請點贊:)

#20160818 20:46
過去這24個小時好多人關注這個答案,不勝惶恐。謝謝各位。


生成對抗網路(generative adversarial networks, GANs)是個很不錯的選擇,很有意思。

@馮超也提到了一個利用GAN生成Pokemon Go的寵物形象的項目。 但是這不如生成二次元妹子的有意思吧?哈哈哈

雖然有部分實在不堪入目,總體來講還是可以辨識的。想要實現的同學可以戳這裡jayleicn/animeGAN: A simple PyTorch Implementation of Generative Adversarial Networks, focusing on anime face drawing.
包含代碼和相應的數據集下載。

另外也有已經訓練好的模型可以直接玩, 你只需要提前安裝好Python和PyTorch(不需要GPU), 然後:

$ git clone https://github.com/jayleicn/animeGAN
$ cd animeGAN
$ jupyter notebook
# 打開Visualization.ipynb文件

相關的論文,
GAN, [1406.2661] Generative Adversarial Networks
DCGAN [1511.06434] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks
Improved GAN [1606.03498] Improved Techniques for Training GANs


如果你已經明白deep learning是幹啥了,然後只有時間看一篇文章,建議看看Kaiming He的 Deep Residual Learning (http://arxiv.org/pdf/1512.03385.pdf),這是我(如果我說了不算,還有我老闆)認為今年對深度學習實際影響最大的文章,以絕對優勢拿了主要的圖像識別比賽的冠軍。現在我們知道的做vision的組基本上都在用了。要知道,在這篇文章之前,30+層的網路已經是不敢想的了。

近兩年還有很多重要而且非常簡單的論文值得好好讀讀的,就給你列幾篇我一下子腦子裡能想到的。你要是還有興趣,說說想看哪個方向的,我再給你推薦呀:
- Batch Normalization - 所有組都在用,幾乎已經替代了Dropout
- Generative Adversarial Networks - adversarial setting在深度學習里的經典案例,還有眾多後作
- XNOR-net 還有 Binary-net - 只用boolean parameters做神經網路的權重!剛剛投到ICML和ECCV的。
還有樓上幾位學長說的Inception和Atari,但這些paper離易於實現還差的遠,至少沒有四塊GPU是搞不定的啦:)

你要是對這個研究方向感興趣呢,我就給自己剛投ECCV的paper打個廣告:Deep Networks with Stochastic Depth - 在訓練時隨機製造不同深度的 residual networks,可以提高準確率,節約計算成本。我們在測試過的幾個圖像識別數據集上是state-of-the-art,即使1200+層的網路也可以有效訓練。Torch 代碼:GitHub - yueatsprograms/Stochastic_Depth: Code for "Deep Networks with Stochastic Depth" 這個也可以訓練 plain residual networks。

####################
有同學問到NLP和social computing的。social computing我的確不大懂,NLP可以簡單說兩個off the top of my head:
- Deep Averaging Networks https://cs.umd.edu/~miyyer/pubs/2015_acl_dan.pdf 這個是最典型的符合題目要求,易於實現。就是把word vectors用bag of words加權平均一下輸給一個網路做sentiment analysis。如果喜歡這類不用NLP就能做NLP的文章,還可以看看Yann LeCun組的Character-level CNN http://arxiv.org/abs/1509.01626。我個人覺得太粗暴了點,有點兒侮辱NLP前輩們的智商啦。
- Skip Though Vectors http://arxiv.org/pdf/1506.06726v1.pdf 通過判斷一句話的上下文句子來學習sentence embedding。這個paradigm我管它叫『無中生有』,很多視覺和NLP做unsupervised learning都是這樣從沒label的數據里造出來的label。還有典型的作品比如word2vec和視覺里 Efros組的context learning http://arxiv.org/pdf/1505.05192v3.pdf。他們組一系列的工作都是這個類型的,如果喜歡這類文章可以關注一下他們組博後http://www.philkr.net的文章,這哥們兒前兩周剛來我們學校做了job talk。
- 還有一個派別是把RNN扭出各種變形(比如說樹)。我個人以為這一派的代表人物是Richard Socher。如果對這一類感興趣可以關注一下他的文章。


推薦一個char-rnn,可以通過rnn學習特徵,再生成對應類型文本,包括但不限於文學名著、論文或代碼。
The Unreasonable Effectiveness of Recurrent Neural Networks


更新於2016年8月。補充一個,現在很火的Prisma背後的演算法。題主可以參考我發在專欄上的文章 Prisma 用了什麼洪荒之力? - 科技蜘蛛 - 知乎專欄 ,詳細介紹了演算法,難點,和未來開發團隊計劃的進步方向。

論文詳細內容可以參見以下:
A neural Algorithm of Artistic Style https://arxiv.org/abs/1508.06576
Image Style Transfer Using Convolutional Neural Networks http://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf
Texture Networks: Feed-forward Synthesis of Textures and Stylized Images http://arxiv.org/abs/1603.03417

Prisma這款的演算法其實不難,但確實是神經網路技術在手機app中一個很新穎很實用的應用。很看好這個方向。隨著雲計算的普及和手機設備端配置的提升,不少基於機器視覺或深度學習技術, 需要大量計算的應用,正越來越接近普通用戶的生活,也將給行業提供無限想像空間。

============
以下是原回答

很多時候,大家不太理解深層網路的隱藏層到底是怎麼運作的。有個例子,既有趣,又能加深對深層網路的理解,Google的研究人員稱之為Inceptionism, 或著有種更fancy更玄乎的叫法,deep dreaming。。。雖然和夢其實沒有半毛錢關係。

Inceptionism的目的是理解每一層神經元到底做了什麼。可以把神經網路反過來,告訴它class,比如香蕉,然後讓網路在每一層生成它認為是香蕉的feature,當然需要加一些自然圖像的限制條件,不然效果不會太好。另一種方法是隨意給網路一幅圖片,然後讓網路在每一層加強任何它檢測到的feature (Whatever you see there, I want more of it)。我們還可以做zoom, 重複迭代,無限制的循環下去,這也是為什麼叫Inceptionism的原因。

論文參見C. Szegedy 的 Going deeper with convolutions。 Google Research Blog也有相關解釋,講得很清楚。 googleresearch.blogspot.fr 的頁面 還有一個用所謂Inceptionism生成的圖集:
Inceptionism: Going deeper into Neural Networks。 當然你也可以根據這個原理做你自己的藝術創作了。

==============

更多文章,敬請關注科技蜘蛛 - 知乎專欄 和同名公眾號。


項目地址:The Sketchy Database

@article{
sketchy2016,
author = {Patsorn Sangkloy and Nathan Burnell and Cusuh Ham and James Hays},
title = {The Sketchy Database: Learning to Retrieve Badly Drawn Bunnies},
journal = {ACM Transactions on Graphics (proceedings of SIGGRAPH)},
year = {2016},
}

項目地址:Transient Attributes for High-Level Understanding and Editing of Outdoor Scenes

@article {Laffont14,
title = {Transient Attributes for High-Level Understanding and Editing of Outdoor Scenes},
author = {Pierre-Yves Laffont and Zhile Ren and Xiaofeng Tao and Chao Qian and James Hays},
journal = {ACM Transactions on Graphics (proceedings of SIGGRAPH)},
volume = {33},
number = {4},
year = {2014}
}

James Hays老師的主頁

----------------------------------------------------------------------------------------------------------------------

2017.03.31更新

Image2Emoji:輸入一幅圖像,輸出對應的Emoji

What emojis will the Emojini 3000 grant your photos?

博客地址:Brewing EmojiNet

參考論文:http://isis-data.science.uva.nl/cgmsnoek/pub/cappallo-image2emoji-mm2015.pdf(論文和項目好像不是同一夥兒人做的)


最近恰好在找項目來學習,在github上搜了幾個有趣的(github實在是一個大寶庫):
1. GitHub - ryankiros/neural-storyteller: A recurrent neural network for generating little stories about images
就是你提供一張圖,然後計算機根據這張圖講一個小故事。

更多效果示意 ,參見 http://www.cs.toronto.edu/~rkiros/adv_L.html

2. GitHub - karpathy/neuraltalk2: Efficient Image Captioning code in Torch, runs on GPU
這個還蠻出名的,就是給出一張圖片,然後生成一句描述,

結果還比較準確,更多效果示意參見 neuraltalk2 results visualization3. GitHub - andersbll/neural_artistic_style: Neural Artistic Style in Python
已經有其他知友介紹了,我這裡就當供張圖吧。
這個就比較常見了,就是提供一張圖片然後選定一種風格,就可以將輸入圖片風格化(藝術化)

一般圖片類的會比較好玩一點,不過計算量都會比較大。
就介紹這幾個,如果需要更多,牆裂推薦去github搜。


圖像風格變換: GitHub - fzliu/style-transfer: An implementation of "A Neural Algorithm of Artistic Style" by L. Gatys, A. Ecker, and M. Bethge. http://arxiv.org/abs/1508.06576.


We』re happy to announce Magenta, a project from the Google Brain team that asks: Can we use machine learning to create compelling art and music? If so, how? If not, why not? We』ll use TensorFlow, and we』ll release our models and tools in open source on our GitHub. We』ll also post demos, tutorial blog postings and technical papers. Soon we』ll begin accepting code contributions from the community at large. If you』d like to keep up on Magenta as it grows, you can follow us on our GitHub and join ourdiscussion group.

http://magenta.tensorflow.org/welcome-to-magenta


不太喜歡以DL為topic問問題,因為目前答來答去都是神經網路,which is not the case....

好吧還是答答正題,個人覺得YOLO挺好,不依賴其他庫,當然有gpu最好。編譯方便實驗容易。實時物體檢測,加上作者比較逗比。嗯,就他吧。


針對前面提到的利用dqn演算法玩flappy bird的,下面提供幾篇論文,有興趣可以看看。。
deep mind 」Human-level control through deep reinforcement learning「
加入LSTM的DQN,Matthew Hausknecht and Peter Stone 「Deep Recurrent Q-Learning for Partially Observable MDPs」
還有deep mind 2016年的論文 「Prioritized experience replay」
當然還有一篇」Neural Turing Machines「,中文名字為「神經網路圖靈機」,聽起來好大氣。。。


乾貨分享丨端到埠語對話系統的設計與實現(文末有福利)

做個補充

http://weixin.qq.com/r/dDr95RvE90aIrV_G929m (二維碼自動識別)


各大深度學習工具包的demo code


圖像分割和自動混合多幅畫的風格生成新的圖畫的論文,我覺得都是很有趣,而且有一些藝術實現的感覺,這些論文有些是有源碼的(好人一生平安),可以先學習再改進,成長較快!


RCNN,直接有代碼。


推薦閱讀:

普通程序員如何向人工智慧靠攏?
為什麼AlphaGo和李世石下棋這麼慢,卻能和自己一天下一百萬盤棋?
目前有哪些比較成功的人工智慧應用?
明明可以語音輸入,為什麼大家還會發語音消息?
如何簡單形象又有趣地講解神經網路是什麼?

TAG:人工智慧 | Python | 機器學習 | 深度學習(Deep Learning) |