1. 程式人生 > >Genetic CNN: 經典NAS演算法,遺傳演算法的標準套用 | ICCV 2017

Genetic CNN: 經典NAS演算法,遺傳演算法的標準套用 | ICCV 2017

論文將標準的遺傳演算法應用到神經網路結構搜尋中,首先對網路進行編碼表示,然後進行遺傳操作,整體方法十分簡潔,搜尋空間設計的十分簡單,基本相當於只搜尋節點間的連線方式,但是效果還是挺不錯的,十分值得學習

來源:曉飛的演算法工程筆記 公眾號

論文: Genetic CNN

  • 論文地址:https://arxiv.org/abs/1703.01513

Introduction


  為了進行神經網路架構搜尋,論文將網路限制為有限的深度,每層為預設的操作,但仍然存在很多候選網路,為了有效地在巨大的搜尋空間中進行搜尋,論文提出遺傳演算法進行加速。首先構造初始種群,然後對種群內的個體進行遺傳操作,即選擇、交叉和變異,通過識別的準確率來判斷其適應性,最終獲得強大的種群

Our Approach


Binary Network Representation

  目前SOTA的網路大都由多個階段構成,每個階段內的層具有相同的維度,而相鄰的階段則用池化進行連線。借鑑這種思想,定義網路有$S$個階段組成,$s$-th階段($s=1,2,...,S$)包含$K_s$個節點,標記為$v_{s,k}$,$k_s=1,2,...,K_s$,節點按順序排列,僅允許低序號節點連線到高序號節點,對節點的所有輸入進行element-wise sum,每個節點代表卷積操作,卷積後都接BN+ReLU,網路不加入全連線層
  每個階段使用$1+2+...+(K_s-1)=\frac{1}{2}K_s(K_s-1)$位來表示內部連線,第一位表示連線$(v_{s,1},v_{s,2})$,第二位和第三位則表示連線$(v_{s,1},v_{s,3})$和$(v_{s,2},v_{s,3})$,以此類推,最後$K_s-1$位則表示$v_{s,K_s}$與其它節點的連線。對於$1\le i\le j\le K_s$,如果$(v_{s_i}, v_{s,j})=1$,則$v_{s_i}$和$v_{s,j}$有邊,$v_{s,j}$將$v_{s,i}$的輸出作為element-wise sum的一部分。編碼如圖1所示,但是Stage 2的編碼好像有點問題,按照圖片應該是0-10-000-0011

  • Technical Details

  每個階段預設有兩個節點,分別為輸入節點$v_{s,0}$和輸出節點$v_{s,K_s+1}$,輸入節點使用卷積將前一個階段的特徵進一步提取,然後傳遞給沒有輸入的節點中,輸出節點則element-wise sum所有沒被使用的節點的輸出,然後進行一次卷積再接池化層,這裡有兩種特殊的情況:

  • 如果節點$v_{s,i}$被隔離了,沒有非預設輸入和輸出,則直接忽略,如圖1 B2節點

  • 如果當前階段沒有連線,全部為0,則只進行一次卷積(原本至少輸入輸出節點都會進行一次)

  • Examples and Limitations

  這樣的編碼形式可以編碼目前的主流分類結構,但也有很多侷限性:

  • 目前的連線方式只有卷積和池化,不能使用其它比較tricky的模組,例如Maxout
  • 每個階段的卷積核是固定的,阻礙了multi-scale特徵的融合

Genetic Operations

  遺傳演算法過程如圖1所示,共進行$T$代遺傳,每代包含3個操作,選擇、變異和交叉,適應值通過訓練後的模型在驗證集上獲得

  • Initialization

  初始化一個隨機模型集合${\mathbb{M}{0,n} }{n=1}N$,每個模型是長度為$L$的二進位制串,串上每位服從伯努利分佈$b_{0,n}l \sim \mathcal{B}(0.5)$,$l=1,2,...,L$,然後訓練並測試每個模型的準確率,這裡的初始化策略影響不大

  • Selection

  在每一代種群生成前都會進行選擇操作,在$t$-th代前,個體$\mathbb{M}{t-1,n}$的適應性為$r{t-1,n}$,直接影響$\mathbb{M}{t-1,n}$在選擇階段存活的概率。具體選擇使用俄羅斯輪盤選擇法(Russian roulette),每個個體選取的概率與$r{t-1,n}-r_{t-1,0}$成比例,$r_{t-1,0}$為上一代的最低適應性。選擇後的保持種群總數不變,所以一個個體可能會被選擇多次

  • Mutation and Crossover

  變異的操作包含對二進位制串每個位進行概率為$q_M$的反轉,而交叉的操作則同時改變兩個個體,以概率$q_C$對個體間的stage進行交換。個體變異的概率為$p_M$,每組個體交叉的概率為$p_C$,具體的操作看演算法1,雖然這種方法很簡單,但是十分有效

  • Evaluation

  在上述操作後,對每個個體$\mathbb{M}_{t,n}$進行訓練以及測試來獲得適應值,如果該個體之前已經測試過了,則直接再測一遍然後求平均,這樣能移除訓練中的不確定性

Experiments


MNIST Experiments

  實驗配置,$S=2$,$(K_1,K_2)=(3,5)$,$L=13$,種群初始$N=20$,共一次$T=50$,$p_M=0.8$,$q_M=0.1$,$p_C=0.2$,$q_C=0.3$,一共只產生$20\times (50+1)=1020\le 8192$個網路,耗時2 GPU-day

CIFAR10 Experiments

  實驗配置,$S=3$,$(K_1,K_2,K_3)=(3,4,5)$,$L=19$,種群初始$N=20$,共一次$T=50$,$p_M=0.8$,$q_M=0.05$,$p_C=0.2$,$q_C=0.2$,一共只產生$20\times (50+1)=1020\le 524288$個網路,耗時17 GPU-day

CIFAR and SVHN Experiments

  將CIFAR-10中學習到的網路直接在別的資料集上進行測試

ILSVRC2012 Experiments

  將圖5中的兩個網路在ILSVRC2012上進行訓練,先用VFFNet的stem進行下采樣,再過圖5的網路,最後接全連線進行分類

CONCLUSION


  論文將標準的遺傳演算法應用到神經網路結構搜尋中,首先對網路進行編碼表示,然後進行遺傳操作,整體方法十分簡潔,搜尋空間設計的十分簡單,基本相當於只搜尋節點間的連線方式,但是效果還是挺不錯的,十分值得學習



如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的演算法工程筆記】

相關推薦

Genetic CNN: 經典NAS演算法遺傳演算法標準套用 | ICCV 2017

論文將標準的遺傳演算法應用到神經網路結構搜尋中,首先對網路進行編碼表示,然後進行遺傳操作,整體方法十分簡潔,搜尋空間設計的十分簡單,基本相當於只搜尋節點間的連線方式,但是效果還是挺不錯的,十分值得學習   來源:曉飛的演算法工程筆記 公眾號 論文: Genetic CNN 論文地址:https://

人工智慧實驗——隨機重啟爬山法模擬退火演算法遺傳演算法求解N皇后問題

一、爬山法 爬山法就是完全的貪心演算法,每一步都選最優位置,可能只能得到區域性最優解。本實驗對普通爬山法進行了簡單的優化,採用了傳統爬山法的變種——隨機重啟爬山法,當爬山步數超過一定值時,會重新打亂棋盤,重新“爬山”。 適應度函式:衝突皇后的總對數 “爬山”:每一步就是

[work] 演算法學習筆記 (爬山法模擬退火演算法遺傳演算法

在優化問題中,有兩個關鍵點 代價函式 確定問題的形式和規模之後,根據不同的問題,選擇要優化的目標。如本文涉及的兩個問題中,一個優化目標是使得航班選擇最優,共計12個航班,要使得總的票價最少且每個人的等待時間之和最小。第二個問題是學生選擇宿舍的問題,每個學生可以實現填報

何為啟發式演算法——退火演算法蟻群演算法遺傳演算法

一、退火演算法 模擬退火演算法來源於固體退火原理,將固體加溫至充分高,再讓其徐徐冷卻,加溫時,固體內部粒子隨溫升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最後在常溫時達到基態,內能減為最小。 模擬退火演算法新解的產生和接受

模擬退火演算法和爬山演算法遺傳演算法

優化演算法入門系列文章目錄(更新中):   2.遺傳演算法 一. 爬山演算法 ( Hill Climbing )          介紹模擬退火前,先介紹爬山演算法。爬山演算法是一種簡單的貪心搜尋演算法,該演算法每次從當前解的臨近解空間中選擇一個最優解作為當前解

集體智慧程式設計——優化搜尋演算法:爬山法模擬退火演算法遺傳演算法-Python實現

在優化問題中,有兩個關鍵點 代價函式:確定問題的形式和規模之後,根據不同的問題,選擇要優化的目標。如本文涉及的兩個問題中,一個優化目標是使得航班選擇最優,共計12個航班,要使得總的票價最少且每個人的等待時間之和最小。第二個問題是學生選擇宿舍的問題,每個學生可

MIP啟發式演算法遺傳演算法 (Genetic algorithm)

*本文主要記錄和分享學習到的知識,算不上原創 *參考文獻見連結 本文主要講述啟發式演算法中的遺傳演算法。遺傳演算法也是以local search為核心框架,但在表現形式上和hill climbing, tabu search, Variable neighborhood search等以一個初始解出發的演

【尋優演算法遺傳演算法Genetic Algorithm) 引數尋優的python實現

【尋優演算法】遺傳演算法(Genetic Algorithm) 引數尋優的python實現 一、遺傳演算法簡介 1、遺傳演算法由來 2、遺傳演算法名詞概念 3、遺傳演算法中對染色體的操作 3.1、選擇 3.2

已知長度為n的線性表A採用順序儲存結構請寫一個時間複雜度為O(n)、空間複雜度為O(1)的演算法演算法可刪除線性表中所有值為item的資料元素。

語言:C++ #include <iostream> using namespace std; typedef int ElemType; //定義 #define MAXSIZE 100 typedef struct {ElemType *elem; int length;}Sq

【HDU - 3068】最長迴文(Manacher演算法馬拉車演算法求最長迴文子串)

題幹: 給出一個只由小寫英文字元a,b,c...y,z組成的字串S,求S中最長迴文串的長度.  迴文就是正反讀都是一樣的字串,如aba, abba等 Input 輸入有多組case,不超過120組,每組輸入為一行小寫英文字元a,b,c...y,z組成的字串S  兩

機器學習總結(八)決策樹ID3C4.5演算法CART演算法

本文主要總結決策樹中的ID3,C4.5和CART演算法,各種演算法的特點,並對比了各種演算法的不同點。 決策樹:是一種基本的分類和迴歸方法。在分類問題中,是基於特徵對例項進行分類。既可以認為是if-then規則的集合,也可以認為是定義在特徵空間和類空間上的條件概率分佈。 決策樹模型:決策樹由結點和有向邊組

一種告訴你圖片裡馬冬梅冬馬梅分別在哪裡的演算法YOLO演算法2016論文筆記

寫在最前面 作者Joseph Redmon是我曾經的男神。作為當時學深度學習時亮到我的文章(他的官網也是“亮”到了我),我決定第一篇論文筆記就寫這篇YOLO演算法論文。對於一張影象,其中的物體可能很多,如何識別其中物體是什麼,在哪裡,就要看這篇代表作品了。 論文名 Y

【智慧優化演算法遺傳演算法的精英選擇策略、期望選擇策略

這兩個策略,不好檢索。我從中英論文中找到了解釋,貼在這裡。 (1)最優儲存策略 這段英文不夠具體,我找到了對應中文解釋(見論文:遺傳演算法在分配問題中的應用): (2)期望選擇策略 這段英文同樣很籠統,我還是找到了中文解釋,但是換了個名稱((見論文:遺傳演算法在

演算法遺傳演算法GA中幾種交叉運算元小結

(圖片例子來自上課時老師的PPT,不過老師說PPT是他從網上組合的,所以沒有出處) 1、Partial-Mapped Crossover (PMX)   過程:  第一步,隨機選擇一對染色體(父代)中幾個基因的起止位置(兩染色體被選位置相同):     第二

粒子群演算法遺傳演算法的比較

粒子群演算法(PSO)和遺傳演算法(GA)都是優化演算法,都力圖在自然特性的基礎上模擬個體種群的適應性,它們都採用一定的變換規則通過搜尋空間求解。     PSO和GA的相同點:   (1)都屬於仿生演算法。PSO主要模擬鳥類覓食、人類認知等社會行

STL基礎--演算法(已排序資料的演算法數值演算法

已排序資料的演算法 Binary search, merge, set operations 每個已排序資料演算法都有一個同名的更一般的形式 vector 1. 二分法搜尋 // 搜尋元素 bool found = binary_search(vec.begin(), vec.end()

計算機圖形學 學習筆記(一):概述直線掃描轉換演算法:DDA中點畫線演算法Bresenham演算法

前言 感謝中國農大 趙明老師的分享~ 現在我要為我自己走向遊戲程式設計打下基石~ 1 計算機圖形學概論 1.1 計算機圖形學課程簡介 《計算機圖形學》是計算機、地理資訊系統、應用數學、機械、建築等專業本科教學中的一門重要的專業基礎課 如影

從零開始實現遺傳演算法(用遺傳演算法破解密碼)

本系列文章的所有原始碼都將會開源,需要原始碼的小夥伴可以去我的 Github fork! 上一篇文章我們動手實驗了用遺傳演算法求解函式在給定區間的最大值。本篇文章再來看一個實驗:用遺傳演算法破解密碼。 在這個問題中,我們的個體就是一串字串了,其目的就

TigerGraph開源十大圖資料庫演算法庫 ——基於GSQL的圖靈完備的演算法執行演算法查詢與執行GSQL查詢動作一致

日前,全球速度最快的企業級圖分析平臺TigerGraph宣佈,正式開源 TigerGraph GSQL 圖資料庫演算法庫,釋出三大類共十大核心演算法。 通過開放這些演算法庫,將為使用者提供圖分析的演算法模板和示範,讓使用者以更加簡單易用的方式支援更廣泛場景的業務分析。 目前,使用者可以從gi

Java資料結構:四種基本演算法(窮舉演算法遞推演算法分治演算法概論演算法

1,窮舉演算法 主要解決雞兔同籠類似問題 public class 窮舉演算法 { public static void main(String[] args) { int head = 35; int foot = 94; int j = 0; i