集成式學習(Ensemble Learning)是透過整合大量基學習器(Base Learner),來達到更好的模型效能。然而,集成式學習常見的問題,便是訓練時間太長。今天,我們要來介紹一篇論文提出的 BatchEnsemble,可以讓你在同一張 GPU 或是 CPU 上面平行訓練多個基學習器!
一、簡單神經網路
我們先來看一個簡單的神經網路:輸入 X 是 3 個元素的陣列,輸出 Y 是 2 個元素的陣列。這邊我們先只看神經網路的權重(Weight),偏值(Bias)就先不理(或是大家可以將 X 的第一個元素視為常數 1,作為偏值)
我們把 X 的每個元素相關的權重擺成一個列向量,將所有神經元的向量擺在一起就成了如下矩陣。
因此,我們可以透過矩陣運算,得到輸出 Y。
二、BatchEnsemble 的基本想法
對於每一個基學習器,都有一個元素個數為 3 的行向量,以及一個元素個數為 2 個列向量。我們將這 2 個向量乘開後,也會得到一個 3 乘 2 的矩陣,本文稱這個矩陣為 Fast Matrix。
而基學習器的真正權重,是上述 Fast Matrix 跟一個與所有基學習器共用的矩陣(本文稱 Share Matrix)組合而成:
其中,圓圈的運算為 Hadamard product,也就是個別元素相乘。我們可以進一步拆解這個運算過程:
三、實現平行運算
現在,假設我們有 2 個基學學習器,現在將 2 個基學習器的 Fast Matrix 中的列向量,以列的方式排在一起,然後跟 X 矩陣做 Hadamard product。
接著跟 Share Matrix 做矩陣乘法。
最後在將 2 個基學習器的 Fast Matrix 中的行向量,以列的方式排在一起,然後做 Hadamard product。
如此一來,我們就可以在同一張 GPU 上面,透過矩陣乘法以及 Hadamard product,同時計算數個基學習器囉!
參考資料
Wen, Yeming & Tran, Dustin & Ba, Jimmy. (2020). BatchEnsemble: an Alternative Approach to Efficient Ensemble and Lifelong Learning.
關於作者
Chia-Hao Li received the M.S. degree in computer science from Durham University, United Kingdom. He engages in computer algorithm, machine learning, and hardware/software codesign. He was former senior engineer in Mediatek, Taiwan. His currently research topic is the application of machine learning techniques for fault detection in the high-performance computing systems.