# 十三、AutoML 和學習如何學習(元學習)
深度學習的成功極大地促進了特征工程的工作。 確實,傳統的機器學習很大程度上取決于對正確的特征集的選擇,而且與選擇特定的學習算法相比,這一步驟通常更為重要。 深度學習改變了這種情況。 創建正確的模型仍然非常重要,但是現今的網絡對特定特征集的選擇已不那么敏感,并且能夠自動選擇真正重要的特征。
取而代之的是,深度學習的引入使人們更加關注正確的神經網絡架構的選擇。 這意味著研究人員的興趣正逐漸從特征工程轉向網絡工程。 **AutoML**(**元學習**)是一個新興的研究主題,旨在針對給定的學習任務自動選擇最有效的神經網絡。 換句話說,AutoML 代表*學習如何有效學習*的一組方法。 考慮例如機器翻譯,圖像識別或游戲的任務。 通常,模型是由工程師,數據科學家和領域專家組成的團隊手動設計的。 如果您認為一個典型的 10 層網絡可以具有約`10^10`個候選網絡,那么您就會知道該過程可能很昂貴,容易出錯并且最終不是最佳選擇。
# 使用循環網絡和強化學習的元學習
解決此問題的關鍵思想是擁有一個控制器網絡,該控制器網絡會在給定特定網絡輸入的情況下,以概率`p`提出*子*模型架構。 對子項進行訓練和評估,以解決要解決的特定任務(例如,子項獲得的準確率`R`)。 該評估`R`被傳遞回控制器,該控制器進而使用`R`來改善下一個候選架構。 在此框架下,可以將候選子項到控制器的反饋建模為計算`p`的梯度的任務,然后通過`R`縮放此梯度。 控制器可以實現為循環神經網絡(請參見下圖)。 這樣做,控制器將傾向于在迭代之后獲得更好的`R`的架構候選區域,并傾向于給得分不那么高的候選區域分配較低的概率。

例如,控制器循環神經網絡可以對卷積網絡進行采樣。 控制器可以預測許多超參數,例如過濾器高度,過濾器寬度,步幅高度,步幅寬度和一層過濾器的數量,然后可以重復。 每個預測可以由 softmax 分類器執行,然后輸入到下一個 RNN 時間步中。 以下圖片來自[《使用增強學習的神經架構搜索》](https://arxiv.org/abs/1611.01578)(Barret Zoph,Quoc V. Le):

預測超參數是不夠的,因為最好定義一組動作以在網絡中創建新層。 這特別困難,因為描述新層的獎勵函數極有可能是不可區分的,因此無法通過標準技術(例如 SGD)對其進行優化。 解決方案來自強化學習,它包括采用類似于我們的第 9 章,“強化學習”中所述的策略梯度網絡。
除此之外,并行性可用于優化控制器 RNN 的參數。 Quoc Le&Barret Zoph 建議采用參數服務器方案,其中我們有一個 S 碎片的參數服務器,用于存儲 K 個控制器副本的共享參數。 每個控制器副本都采樣了如下圖所示的并行訓練的不同子架構,如下圖所示,取自[《使用增強學習的神經架構搜索》](https://arxiv.org/abs/1611.01578)(Barret Zoph,Quoc V. Le):

Quoc 和 Barret 將 AutoML 技術用于神經架構搜索應用于 [Penn Treebank 數據集](https://en.wikipedia.org/wiki/Treebank),這是語言建模的著名基準。 他們的結果改進了目前被認為是最先進的手動設計網絡。 特別是,他們在 Penn Treebank 上實現了 62.4 的測試集困惑,這比以前的最新模型好 3.6 困惑。 同樣,在 [CIFAR-10 數據集](https://www.cs.toronto.edu/~kriz/cifar.html)上,該方法可以設計一種新穎的網絡架構,與測試集準確率方面最好的人類發明架構旗鼓相當。 提出的 CIFAR-10 模型實現了 3.65 的測試錯誤率,比使用類似架構方案的最新技術模型好 0.09%,并且快 1.05 倍。
# 元學習塊
在[《用于可伸縮圖像識別的學習可傳輸架構》](https://arxiv.org/abs/1707.07012)(Barret Zoph,Vijay Vasudevan,Jonathon Shlens,Quoc V. Le,2017)中,建議在小型數據集上學習架構構造塊,然后將其傳輸到大型數據集。 作者建議在 CIFAR-10 數據集上搜索最佳的卷積層(或單元),然后通過堆疊該單元的更多副本(每個都有其自己的參數),將此學習到的單元應用于 ImageNet 數據集。 準確地說,所有卷積網絡都是由結構相同但權重不同的卷積層(或單元)組成的。 因此,將搜索最佳卷積架構簡化為搜索最佳單元結構,這樣可以更快地將其推廣到其他問題。 盡管無法在 ImageNet 上直接學習該單元,但是在已發表的工作中,由學得最好的單元構成的架構可實現 ImageNet 的最新精度為 82.7% top-1 和 96.2% top-5。 該模型的 top-1 準確率比人類發明的最佳架構高 1.2%,而 FLOPS 則減少了 90 億個,與之前的最新模型相比降低了 28%。 還需要注意的重要一點是,使用 RNN + RL(循環神經網絡+強化學習)學習的模型正在擊敗隨機搜索(RL)代表的基線,如本文中所取的圖所示。 在 RL 與 RS 中確定的前 5 名和前 25 名模型的平均表現中,RL 始終是贏家:

# 新任務的元學習
可以對元學習系統進行訓練以完成大量任務,然后對其元學習新任務的能力進行測試。 這種元學習的一個著名例子是在高級 CNN 章節中討論的所謂遷移學習,其中網絡可以從相對較小的數據集中成功學習基于圖像的新任務。 但是,對于諸如語音,語言和文本之類的非視覺領域,沒有類似的預訓練方案。
[《用于快速適應深度網絡的模型不可知元學習》](https://arxiv.org/abs/1703.03400)(切爾西·芬恩(Chelsea Finn),彼得·阿比爾(Siety Levine),2017 年)提出了一個模型 -不可知論方法的名稱為 MAML,它與經過梯度下降訓練的任何模型兼容,并且適用于各種不同的學習問題,包括分類,回歸和強化學習。 元學習的目標是針對各種學習任務訓練模型,以便僅使用少量訓練樣本即可解決新的學習任務。 元學習器旨在找到一種可以快速(以很少的步驟)并有效地(僅使用幾個示例)快速適應各種問題的初始化。 用參數為θ的參數化函數`f[0]`表示的模型。 當適應新任務`T[i]`時,模型參數`θ`變為`θ[i']`。 在 MAML 中,使用對任務`T[i]`的一個或多個梯度下降更新來計算更新的參數向量`θ[i']`。
例如,當使用一個梯度更新時,`θ[i'] = θ - α?[0]L[Ti](f[θ])`,其中`L[Ti]`是任務`T`的損失函數,而`α`是元學習參數。 該圖報告了 MAML 算法:

MAML 能夠在流行的少拍圖像分類基準上大大勝過許多現有方法。 旨在從一個或幾個概念中學習新概念的鏡頭很少有挑戰性。 例如,[《通過概率性程序歸納進行人級概念學習》](https://www.cs.cmu.edu/~rsalakhu/papers/LakeEtAl2015Science.pdf)(Brenden M. Lake,Ruslan Salakhutdinov,Joshua B. Tenenbaum,2015 年),建議人們可以學會從單個圖片中識別新穎的兩輪車,例如紅色框中包含的圖片,如下所示:

在 2017 年底,AutoML(或元學習)主題是一個活躍的研究主題,旨在針對給定的學習任務自動選擇最高效的神經網絡。 目標是學習如何高效,自動地設計網絡,從而可以學習特定任務或適應新任務。 主要問題是不能簡單地用可微分的損失函數描述網絡的設計,因此傳統的優化技術不能簡單地用于元學習。 因此,已經提出了一些解決方案,包括具有控制器循環網絡(RNN)和基于強化學習的獎勵策略的思想,以及具有與模型無關的元學習的思想。 兩種方法都非常有前途,但是肯定還有很多研究空間。
因此,如果您對一個熱門話題感興趣,那么*學習深度學習*當然是一個可以考慮作為下一份工作的空間。
* Google 提出了[采用 RNN 作為控制器的方法](https://research.googleblog.com/2017/05/using-machine-learning-to-explore.html),該方法使用機器學習來探索神經網絡架構。
* [《帶有增強學習的神經架構搜索》](https://arxiv.org/abs/1611.01578)(Barret Zoph,Quoc V. Le)是一篇開創性的論文,它證明了有關 Google 方法的更多細節。 但是,RNN 不是唯一的選擇。
* [《圖像分類器的大規模發展》](https://arxiv.org/abs/1703.01041)(Esteban Real,Sherry Moore,Andrew Selle,Saurabh Saxena,Yutaka Leon Suematsu,Jie Tan,Quoc Le,Alex Kurakin,2017 年)提出在進化遺傳算法中使用遺傳計算來探索新的候選網絡。
* [《學習用于可伸縮圖像識別的可遷移架構》](https://arxiv.org/abs/1707.07012)(Barret Zoph,Vijay Vasudevan,Jonathon Shlens,Quoc V. Le)提出了在 CIFAR 上學習的單元,用于改善 ImageNet 分類。
* [《構建可以建立人工智能的 AI》](https://www.nytimes.com/2017/11/05/technology/machine-learning-artificial-intelligence-ai.html):谷歌和其他公司為爭奪一小部分研究人員而奮斗,他們正在尋找自動方法來應對人工智能專家的短缺。
* [《用于快速適應深度網絡的模型不可知元學習》](https://arxiv.org/abs/1703.03400)(切爾西·芬恩(Chelsea Finn),彼得·阿比耶爾(Pieter Abbeel),謝爾蓋·萊文(Sergey Levine),2017 年)。
* [《通過梯度下降學習》](https://arxiv.org/abs/1606.04474)(Marcin Andrychowicz,Misha Denil,Sergio Gomez,Matthew W. Hoffman,David Pfau,Tom Schaul,Brendan Shillingford,Nando de Freitas)展示了如何將優化算法的設計轉換為學習問題,從而使該算法能夠自動學習感興趣的問題中的結構。 LSMT 學習的算法在訓練任務上勝過手工設計的競爭對手,并且可以很好地推廣到結構相似的新任務。 該算法的代碼可在 [GitHub](https://github.com/deepmind/learning-to-learn) 上獲得。
# 連體網絡
連體網絡是 Yann LeCun 及其同事在 NIPS 1994 中提出的[一種特殊類型的神經網絡](http://www.worldscientific.com/doi/pdf/10.1142/S0218001493000339)。 它們背后的基本思想是,像“連體雙胞胎”一樣,該網絡由兩個不同的神經網絡組成,它們共享相同的架構和權重。
在這里,您可以看到連體架構:

在訓練階段,該對網絡會顯示一個訓練對`(X[1], X[2])`,其中兩個輸入不同但相似,例如, `X[1] = 他很聰明`,而`X[2] = 他是一個聰明人`。 這兩個神經網絡將產生兩個不同的結果。 可以將組合網絡視為測量訓練對`(X[1], X[2])`之間相似度的標量**能量函數** , 定義為:

連體網絡的目標是訓練對`(X[1], X[2])`之間的能量應小于其他贗品對之間的能量`(X[1], X'[2])`。
這可以通過使用**對比損失函數**進行訓練來實現。
在訓練階段,網絡被輸入一個訓練對和一個與之相關的標簽,告訴它是一個真正的對或贗品對的網絡:`(X[1], X[2], Y[i])`第`i`個訓練樣本。 對比損失函數計算如下:

其中,

和`L[G]`是真正對的部分損失, `L[I]`是贗品的部分損失對和`P`訓練樣本數。 當偶對是正品時,標簽`Y`的值為 0;當偶對是贗品時,標簽`Y`的值為 1。 設計局部損失`L[G]`和`L[I]`的方式應使對比損耗`L(W)`將減少真正對的能量并增加贗品的能量。 這是通過選擇部分損失`L(G)`單調增加而選擇部分損失`L(I)`單調減少`f`來實現的。 一種可能的選擇是使用余弦相似度來計算部分損耗。
使用反向傳播算法調整權重。
# 連體網絡的應用
近年來,連體網絡已用于許多應用。 他們在 LeCun 論文中首次使用的是簽名驗證。 從那時起,出現了許多應用,我們將介紹一些最近的應用:
* [與連體網絡進行說話人和語音相似性的聯合學習](https://pdfs.semanticscholar.org/4ffe/3394628a8a0ffd4cba1a77ea85e197bd4c22.pdf):他們訓練了一個多輸出連體網絡,其中一個輸出用于語音相似性,其他用于演講者相似性。 他們將工作擴展到三體網絡。
* [用于對象跟蹤的全卷積連體網絡](https://link.springer.com/chapter/10.1007/978-3-319-48881-3_56):他們使用在 ILSVRC15 數據集上訓練的卷積連體網絡進行視頻中的目標檢測。
* 我們站在一起:[連體網絡進行類似問題的檢索](http://www.aclweb.org/anthology/P16-1036):本文使用連體網絡來查找當前問題和已歸檔問題之間的語義相似性 。 他們還使用了卷積連體網絡。
除此之外,還對連體網絡進行了[臉部驗證/識別](https://github.com/harveyslash/Facial-Similarity-with-Siamese-Networks-in-Pytorch)。 [它們已用于問題解答](https://arxiv.org/pdf/1512.05193v2.pdf)。
# 一個有效的例子 -- MNIST
工作示例基于 [Github 頁面](https://github.com/ywpkwon/siamese_tf_mnist)。 此處的代碼使用連體網絡將手寫的 MNIST 數字嵌入到 2D 空間中,屬于同一類的數字被嵌入在一起。 該代碼包含三個主要文件:
+ `run.py`:它包含執行訓練的基本包裝。 它使用“梯度下降”算法將對比度損失降至最低。
+ `inference.py`:包含定義 3 層全連接網絡的連體類。 代碼中兩個網絡的輸出之間的相似性是歐幾里得。 然后,使用部分生成損失和部分贗品損失來計算對比損失。
+ `visualize.py`:這只是用于可視化結果的包裝。
經過前 100,000 個訓練步驟,結果是:

您可以看到相同(標記)的數字一起嵌入 2D 空間。
還有另一個有趣的示例](https://github.com/dhwajraj/deep-siamese-text-similarity) 。
在這里,使用 Tensorflow,訓練了深層的連體 LSTM 網絡以使用字符嵌入來捕獲短語/句子相似性。
- TensorFlow 1.x 深度學習秘籍
- 零、前言
- 一、TensorFlow 簡介
- 二、回歸
- 三、神經網絡:感知器
- 四、卷積神經網絡
- 五、高級卷積神經網絡
- 六、循環神經網絡
- 七、無監督學習
- 八、自編碼器
- 九、強化學習
- 十、移動計算
- 十一、生成模型和 CapsNet
- 十二、分布式 TensorFlow 和云深度學習
- 十三、AutoML 和學習如何學習(元學習)
- 十四、TensorFlow 處理單元
- 使用 TensorFlow 構建機器學習項目中文版
- 一、探索和轉換數據
- 二、聚類
- 三、線性回歸
- 四、邏輯回歸
- 五、簡單的前饋神經網絡
- 六、卷積神經網絡
- 七、循環神經網絡和 LSTM
- 八、深度神經網絡
- 九、大規模運行模型 -- GPU 和服務
- 十、庫安裝和其他提示
- TensorFlow 深度學習中文第二版
- 一、人工神經網絡
- 二、TensorFlow v1.6 的新功能是什么?
- 三、實現前饋神經網絡
- 四、CNN 實戰
- 五、使用 TensorFlow 實現自編碼器
- 六、RNN 和梯度消失或爆炸問題
- 七、TensorFlow GPU 配置
- 八、TFLearn
- 九、使用協同過濾的電影推薦
- 十、OpenAI Gym
- TensorFlow 深度學習實戰指南中文版
- 一、入門
- 二、深度神經網絡
- 三、卷積神經網絡
- 四、循環神經網絡介紹
- 五、總結
- 精通 TensorFlow 1.x
- 一、TensorFlow 101
- 二、TensorFlow 的高級庫
- 三、Keras 101
- 四、TensorFlow 中的經典機器學習
- 五、TensorFlow 和 Keras 中的神經網絡和 MLP
- 六、TensorFlow 和 Keras 中的 RNN
- 七、TensorFlow 和 Keras 中的用于時間序列數據的 RNN
- 八、TensorFlow 和 Keras 中的用于文本數據的 RNN
- 九、TensorFlow 和 Keras 中的 CNN
- 十、TensorFlow 和 Keras 中的自編碼器
- 十一、TF 服務:生產中的 TensorFlow 模型
- 十二、遷移學習和預訓練模型
- 十三、深度強化學習
- 十四、生成對抗網絡
- 十五、TensorFlow 集群的分布式模型
- 十六、移動和嵌入式平臺上的 TensorFlow 模型
- 十七、R 中的 TensorFlow 和 Keras
- 十八、調試 TensorFlow 模型
- 十九、張量處理單元
- TensorFlow 機器學習秘籍中文第二版
- 一、TensorFlow 入門
- 二、TensorFlow 的方式
- 三、線性回歸
- 四、支持向量機
- 五、最近鄰方法
- 六、神經網絡
- 七、自然語言處理
- 八、卷積神經網絡
- 九、循環神經網絡
- 十、將 TensorFlow 投入生產
- 十一、更多 TensorFlow
- 與 TensorFlow 的初次接觸
- 前言
- 1.?TensorFlow 基礎知識
- 2. TensorFlow 中的線性回歸
- 3. TensorFlow 中的聚類
- 4. TensorFlow 中的單層神經網絡
- 5. TensorFlow 中的多層神經網絡
- 6. 并行
- 后記
- TensorFlow 學習指南
- 一、基礎
- 二、線性模型
- 三、學習
- 四、分布式
- TensorFlow Rager 教程
- 一、如何使用 TensorFlow Eager 構建簡單的神經網絡
- 二、在 Eager 模式中使用指標
- 三、如何保存和恢復訓練模型
- 四、文本序列到 TFRecords
- 五、如何將原始圖片數據轉換為 TFRecords
- 六、如何使用 TensorFlow Eager 從 TFRecords 批量讀取數據
- 七、使用 TensorFlow Eager 構建用于情感識別的卷積神經網絡(CNN)
- 八、用于 TensorFlow Eager 序列分類的動態循壞神經網絡
- 九、用于 TensorFlow Eager 時間序列回歸的遞歸神經網絡
- TensorFlow 高效編程
- 圖嵌入綜述:問題,技術與應用
- 一、引言
- 三、圖嵌入的問題設定
- 四、圖嵌入技術
- 基于邊重構的優化問題
- 應用
- 基于深度學習的推薦系統:綜述和新視角
- 引言
- 基于深度學習的推薦:最先進的技術
- 基于卷積神經網絡的推薦
- 關于卷積神經網絡我們理解了什么
- 第1章概論
- 第2章多層網絡
- 2.1.4生成對抗網絡
- 2.2.1最近ConvNets演變中的關鍵架構
- 2.2.2走向ConvNet不變性
- 2.3時空卷積網絡
- 第3章了解ConvNets構建塊
- 3.2整改
- 3.3規范化
- 3.4匯集
- 第四章現狀
- 4.2打開問題
- 參考
- 機器學習超級復習筆記
- Python 遷移學習實用指南
- 零、前言
- 一、機器學習基礎
- 二、深度學習基礎
- 三、了解深度學習架構
- 四、遷移學習基礎
- 五、釋放遷移學習的力量
- 六、圖像識別與分類
- 七、文本文件分類
- 八、音頻事件識別與分類
- 九、DeepDream
- 十、自動圖像字幕生成器
- 十一、圖像著色
- 面向計算機視覺的深度學習
- 零、前言
- 一、入門
- 二、圖像分類
- 三、圖像檢索
- 四、對象檢測
- 五、語義分割
- 六、相似性學習
- 七、圖像字幕
- 八、生成模型
- 九、視頻分類
- 十、部署
- 深度學習快速參考
- 零、前言
- 一、深度學習的基礎
- 二、使用深度學習解決回歸問題
- 三、使用 TensorBoard 監控網絡訓練
- 四、使用深度學習解決二分類問題
- 五、使用 Keras 解決多分類問題
- 六、超參數優化
- 七、從頭開始訓練 CNN
- 八、將預訓練的 CNN 用于遷移學習
- 九、從頭開始訓練 RNN
- 十、使用詞嵌入從頭開始訓練 LSTM
- 十一、訓練 Seq2Seq 模型
- 十二、深度強化學習
- 十三、生成對抗網絡
- TensorFlow 2.0 快速入門指南
- 零、前言
- 第 1 部分:TensorFlow 2.00 Alpha 簡介
- 一、TensorFlow 2 簡介
- 二、Keras:TensorFlow 2 的高級 API
- 三、TensorFlow 2 和 ANN 技術
- 第 2 部分:TensorFlow 2.00 Alpha 中的監督和無監督學習
- 四、TensorFlow 2 和監督機器學習
- 五、TensorFlow 2 和無監督學習
- 第 3 部分:TensorFlow 2.00 Alpha 的神經網絡應用
- 六、使用 TensorFlow 2 識別圖像
- 七、TensorFlow 2 和神經風格遷移
- 八、TensorFlow 2 和循環神經網絡
- 九、TensorFlow 估計器和 TensorFlow HUB
- 十、從 tf1.12 轉換為 tf2
- TensorFlow 入門
- 零、前言
- 一、TensorFlow 基本概念
- 二、TensorFlow 數學運算
- 三、機器學習入門
- 四、神經網絡簡介
- 五、深度學習
- 六、TensorFlow GPU 編程和服務
- TensorFlow 卷積神經網絡實用指南
- 零、前言
- 一、TensorFlow 的設置和介紹
- 二、深度學習和卷積神經網絡
- 三、TensorFlow 中的圖像分類
- 四、目標檢測與分割
- 五、VGG,Inception,ResNet 和 MobileNets
- 六、自編碼器,變分自編碼器和生成對抗網絡
- 七、遷移學習
- 八、機器學習最佳實踐和故障排除
- 九、大規模訓練
- 十、參考文獻