deep_learning - cccnqu/ai106b GitHub Wiki
主題:深度學習
文章
-
什麼是深度學習 -- 類神經網絡的卷土重來 (作者:李宏毅) (很棒的簡介文章!)
-
https://medium.com/@yehjames [資料分析&機器學習] 系列
影片
- 周莫烦 YouTube : 秒懂神经网络(系列) -- 共約 20 集,每集約5分鐘
- 什么是卷积神经网络 CNN (深度学习)?
- 還有 RNN, LSTM, AutoEncoder, GAN
- 台大李宏毅的所有課程
- 用十分鐘開始理解深度學習技術 (從 dnn.js 專案出發)
實作
書籍
CNN -- 捲積神經網路
RNN -- 循環神經網路
- RNN 的訓練要用 BPTT (Back Propagation Through Time)
- 學習的時候要做 Clipping ,限制梯度範圍,這樣才不會一下飛出去!(導致 NaN : Not a Number 發生)
影片
- 周莫烦:什么是循环神经网络 RNN (深度学习)? What is Recurrent Neural Networks (deep learning)?
- 李宏毅 - ML Lecture 21-1: Recurrent Neural Network (Part I)
文章:
Attention -- hierarchical neural attention encoder
GAN -- 生成對抗網路
輸出入:
- Generator : 用 vector 產生樣本 (向量 => 圖片)
- Discriminator : 對樣本打分數 (圖片 => 數值)
概念:
- Generator : Bottom-Up
- Discriminator : Top-Down
實作:
- Generator : 每張圖片賦予一個 vector (先 learn a Auto-Encoder),然後再開始 GAN 的學習。
- Learn a Auto-Encoder : 圖 1 => (Encoder) => vector => (Decoder) => 圖 2 (圖 2 要盡可能和圖 1 一樣)
- 兩個字母 1 的向量 v1, v2, 一個左斜,一個右斜,但 0.5 v1 + 0.5 v2 並不會產生不傾斜的 1。
- 解決辦法可用 Variational Auto-Encoder,在訓練時就加入雜訊,訓練出容錯的 Encoder。
- Discriminator : 只有好的圖片是不夠的,也要有《不夠好的圖片》。
- Generator 用 random 產生的雜訊圖片,通常可以用來當第一版《不夠好的圖片》
- Generator 用 x' = arg max_x D(x) 產生更好的 x' ,這些 x' 就成為第 k+1 版的《不夠好的圖片》
- Discriminator 持續用更好的 generator 結果來強化自己的辨識能力!
- Generator 接 Discriminator 形成一個兩倍大的網路,Generator 的輸出是一張圖片, Discriminator 的輸出是一個好壞值。
- Generator 優化讓目前 Discriminator Dt() 所得到的分數值,優化完之後:
- Discriminator 將正確影像輸出值設為 1,Generator 產生的影像輸出值設為 0,然後進行學習,之後產生下一輪的 Dt+1()。
- 整體來看,這仍然是一種迭代優化方法,和 EM 演算法很像!
相關文件
- Image-to-Image Demo -- https://affinelayer.com/pixsrv/
- https://transcranial.github.io/keras-js/#/mnist-acgan
- https://github.com/reiinakano/gan-playground
- https://github.com/mattya/chainer-DCGAN
- https://github.com/hindupuravinash/the-gan-zoo
生成對抗網路 = 警察 vs. 偽造者
研究人員並非訓練單一神經網路,而是訓練兩個相互競爭的神經網路。繼續以貓咪為例,生成器網路試著創作出看起來像真貓的假貓圖片,而判別器網路則是檢視貓咪圖片並試著判斷真假。
GAN 大幅減少訓練深度學習演算法所需的資料量,解決了這個問題,且提供一套訓練深度學習演算法的獨特方法,也就是從現有資料建立加上標籤的資料(在多數情況下就是影像)。
訓練 GAN 時不需要圖形的類別標記,但是必須要擁有一堆真圖,這樣就能提供《是真圖還是假圖》的資訊。 (所以並不能算是《無指導者》阿!)
在GAN裡面會有兩個導航方向,一個是讓偵探(discriminator)往柯南的方向移動,另一個是讓工匠(generator)往魯班的方向移動。
-
要讓偵探變柯南,就要分別提高偵探認出真圖的能力和認出假圖的能力,也就是
- 讓真圖分數和真值(1)差別最小化
- 讓假圖分數和假值(0)差別最小化
-
工匠(generator)也是一樣的邏輯,只是換成讓假圖分數和1差別最小化:提高偵探對假圖的分數。
-
JavaScript 範例 -- https://transcranial.github.io/keras-js/#/mnist-acgan
createNoise() {
const latentSize = 100
const noiseVector = []
for (let i = 0; i < latentSize; i++) {
// uniform random between -1 and 1
noiseVector.push(2 * Math.random() - 1)
}
this.noiseVector = noiseVector
},
async runModel() {
const inputData = {
input_2: new Float32Array(this.noiseVector),
input_3: new Float32Array([this.digit])
}
const outputData = await this.model.predict(inputData)
this.output = outputData['conv2d_7']
this.drawOutput()
},
...
onGenerateNewNoise() {
if (this.modelLoading || this.modelInitializing) return
this.createNoise()
this.runModel()
this.drawNoise()
}
-
29 歲就做出近 20 年最重要 AI 突破,賦予電腦想像力的男人 Ian Goodfellow -- 生成對抗網路 GAN 的發明人
-
The GAN Zoo
-
Generative Adversarial Networks (GANs) -- Ian Goodfellow, OpenAI Research Scientist (PDF)
有人說 GAN 不過就是 Monte Carlo 中的 Reject Sampling ...
是有點相近的感覺,但又差很大 ...