Author Archive

特徵工程 – Feature Engineering

一文看懂特徵工程

特徵工程是機器學習工作流程中重要的組成部分,他是將原始數據「翻譯」成模型可理解的形式。

本文將介紹特徵工程的基本概念、重要性和性能評估的4個步驟。

特徵工程的重要性

大家都聽過美國計算機科學家 Peter Norvig 的2句經典名言:

基於大量數據的簡單模型優於基於少量數據的複雜模型。

這句說明了數據量的重要性。

更多的數據優於聰明的算法,而好的數據優於多的數據。

這句則是說的特徵工程的重要性。

所以,如何基於給定數據來發揮更大的數據價值就是特徵工程要做的事情。

在16年的一項調查中發現,數據科學家的工作中,有80%的時間都在獲取、清洗和組織數據。構造機器學習流水線的時間不到20%。詳情如下:

數據科學家的工作中,有80%的時間都在獲取、清洗和組織數據

  • 設置訓練集:3%
  • 清洗和組織數據:60%
  • 收集數據集:19%
  • 挖掘數據模式:9%
  • 調整算法:5%
  • 其他:4%

PS:數據清洗和組織數據也是數據科學家「最討厭」的工作。感興趣的可以看這篇原始的文章:

數據來源:《Data Scientists Spend Most of Their Time Cleaning Data

什麼是特徵工程

我們先來看看特徵工程在機器學習流程中的位置:

特徵工程在機器學習流程中的位置

從上圖可以看出,特徵工程處在原始數據和特徵之間。他的任務就是將原始數據「翻譯」成特徵的過程。

特徵:是原始數據的數值表達方式,是機器學習算法模型可以直接使用的表達方式。

特徵工程是一個過程,這個過程將數據轉換為能更好的表示業務邏輯的特徵,從而提高機器學習的性能。

這麼說可能不太好理解。其實特徵工程跟做飯很像:

我們將食材購買回來,經過清洗、切菜,然後開始根據自己的喜好進行烹飪,做出美味的飯菜。

特徵工程跟做飯很像

上面的例子中:

食材就好像原始數據

清洗、切菜、烹飪的過程就好像特徵工程

最後做出來的美味飯菜就是特徵

人類是需要吃加工過的食物才行,這樣更安全也更美味。機器算法模型也是類似,原始數據不能直接餵給模型,也需要對數據進行清洗、組織、轉換。最後才能得到模型可以消化的特徵。

除了將原始數據轉化為特徵之外,還有2個容易被忽視的重點:

重點1:更好的表示業務邏輯

特徵工程可以說是業務邏輯的一種數學表達。

我們使用機器學習的目的是為了解決業務中的特定問題。相同的原始數據有很多種轉換為特徵的方式,我們需要選擇那些能夠「更好的表示業務邏輯」,從而更好的解決問題。而不是那些更簡單的方法。

重點2:提高機器學習性能

性能意味着更短時間和更低成本,哪怕相同的模型,也會因為特徵工程的不同而性能不同。所以我們需要選擇那些可以發揮更好性能的特徵工程。

評估特徵工程性能的4個步驟

特徵工程的業務評估很重要,但是方法五花八門,不同業務有不同的評估方法。

這裡只介紹性能的評估方式,相對通用一些。

評估特徵工程性能的4個步驟

  1. 在應用任何特徵工程之前,得到機器學習模型的基準性能
  2. 應用一種或多種特徵工程
  3. 對於每種特徵工程,獲取一個性能指標,並與基準性能進行對比
  4. 如果性能的增量大於某個閾值,則認為特徵工程是有益的,並在機器學習流水線上應用

例如:基準性能的準確率是40%,應用某種特徵工程後,準確率提升到76%,那麼改變就是90%。

(76%-40%)/ 40%=90%

總結

特徵工程是機器學習流程里最花時間的工作,也是最重要的工作內容之一。

特徵工程定義:是一個過程,這個過程將數據轉換為能更好的表示業務邏輯的特徵,從而提高機器學習的性能。

特徵工程容易被忽略的2個重點:

  1. 更好的表示業務邏輯
  2. 提高機器學習性能

特徵工程性能評估的4個步驟:

  1. 在應用任何特徵工程之前,得到機器學習模型的基準性能
  2. 應用一種或多種特徵工程
  3. 對於每種特徵工程,獲取一個性能指標,並與基準性能進行對比
  4. 如果性能的增量大於某個閾值,則認為特徵工程是有益的,並在機器學習流水線上應用

膠囊神經網絡

背景

Geoffrey Hinton是深度學習的開創者之一,反向傳播等神經網絡經典算法發明人,他和他的團隊提出了一種全新的神經網絡,這種網絡基於一種稱為膠囊(capsule)的結構,並且還發表了用來訓練膠囊網絡的囊間動態路由算法。

研究問題

傳統CNN存在着缺陷(下面會詳細說明),如何解決CNN的不足,Hinton提出了一種對於圖像處理更加有效的網絡——膠囊網絡,其綜合了CNN的優點的同時,考慮了CNN缺失的相對位置、角度等其他信息,從而使得識別效果有所提升。

研究動機

CNN的缺陷

CNN着力於檢測圖像像素中的重要特徵。考慮簡單的人臉檢測任務,一張臉是由代表臉型的橢圓、兩隻眼睛、一個鼻子和一個嘴巴組成。而基於CNN的原理,只要存在這些對象就有一個很強的刺激,因此這些對象空間關係反而沒有那麼重要。
如下圖,右圖不是人臉但都具備了人臉需要的對象,所以CNN有很大可能通過具有的對象激活了是人臉的判斷,從而使得結果判斷出錯。
重新審視CNN的工作方式,高層特徵是低層特徵組合的加權和,前一層的激活與下一層神經元的權重相乘並且相加,接着通過非線性激活函數進行激活。在這麼一個架構中,高層特徵和低層特徵之間的位置關係變得模糊(我認為還是有一些的只是沒有很好的利用)。而CNN解決這個問題的方法是通過最大池化層或者或許的卷積層來擴大下續卷積核的視野(我認為最大池化層不管怎麼說或多或少會丟掉信息甚至是重要信息)。

逆圖形法

計算機圖形學是基於幾何數據內部的分層表示來構造可視圖像,其結構考慮到了對象的相對位置,幾何化的對象間的相對位置關係和朝向以矩陣表示,特定的軟件接受這些表示作為輸入並將它們轉化為屏幕上的圖像(渲染)。
Hinton受此啟發,認為大腦所做的和渲染正好相反,稱為逆圖形,從眼睛接受的視覺信息中,大腦解析出其所在世界的分層表示,並嘗試匹配學習到的模式和存儲在大腦中的關係,從而有了辨識,注意到,大腦中的物體表示並不依賴視角。
因此,現在要考慮的是如何在神經網絡中建模這些分層關係。在計算機圖形學中,三維圖形中的三維對象之間的關係可以用位姿表示,位姿的本質是平移和旋轉。Hinton提出,保留對象部件之間的分層位姿關係對於正確分類和辨識對象來說很重要。膠囊網絡結合了對象之間的相對關係,在數值上表示為4維位姿矩陣。當模型有了位姿信息之後,可以很容易地理解它看到的是以前看到的東西而只是改變了視角而已。如下圖,人眼可以很容易分辨出是自由女神像,只是角度的不同,但CNN卻很難做到,而把位姿信息集合進去的膠囊網絡,也可以判別出是自由女神像的不同角度。

膠囊網絡優點

  • 由於膠囊網絡集合了位姿信息,因此其可以通過一小部分數據即學習出很好的表示效果,所以這一點也是相對於CNN的一大提升。舉個例子,為了識別手寫體數字,人腦需要幾十個最多幾百個例子,但是CNN卻需要幾萬規模的數據集才能訓練出好結果,這顯然還是太暴力了!
  • 更加貼近人腦的思維方式,更好地建模神經網絡中內部知識表示的分層關係,膠囊背後的直覺非常簡單優雅。

膠囊網絡缺點

  • 膠囊網絡的當前實現比其他現代深度學習模型慢很多(我覺得是更新耦合係數以及卷積層疊加影響的),提高訓練效率是一大挑戰。

研究內容

膠囊是什麼

摘抄Hinton等人的《Transforming Autoencoders》關於膠囊概念理解如下。

人工神經網絡不應當追求「神經元」活動中的視角不變性(使用單一的標量輸出來總結一個局部池中的重複特徵檢測器的活動),而應當使用局部的「膠囊」,這些膠囊對其輸入執行一些相當複雜的內部計算,然後將這些計算的結果封裝成一個包含信息豐富的輸出的小向量。每個膠囊學習辨識一個有限的觀察條件和變形範圍內隱式定義的視覺實體,並輸出實體在有限範圍內存在的概率及一組「實例參數」,實例參數可能包括相對這個視覺實體的隱式定義的典型版本的精確的位姿、照明條件和變形信息。當膠囊工作正常時,視覺實體存在的概率具有局部不變性——當實體在膠囊覆蓋的有限範圍內的外觀流形上移動時,概率不會改變。實例參數卻是「等變的」——隨着觀察條件的變化,實體在外觀流形上移動時,實例參數也會相應地變化,因為實例參數表示實體在外觀流形上的內在坐標。

簡單來說,可以理解成:
  • 人造神經元輸出單個標量。卷積網絡運用了卷積核從而使得將同個卷積核對於二維矩陣的各個區域計算出來的結果堆疊在一起形成了卷積層的輸出。
  • 通過最大池化方法來實現視角不變性,因為最大池持續搜尋二維矩陣的區域,選取區域中最大的數字,所以滿足了我們想要的活動不變性(即我們略微調整輸入,輸出仍然一樣),換句話說,在輸入圖像上我們稍微變換一下我們想要檢測的對象,模型仍然能夠檢測到對象
  • 池化層損失了有價值的信息,同時也沒有考慮到編碼特徵間的相對空間關係,因此我們應該使用膠囊,所有膠囊檢測中的特徵的狀態的重要信息,都將以向量形式被膠囊封裝(神經元是標量)
膠囊和人工神經元對比如下:

囊間動態路由算法

低層膠囊需要決定如何將其輸出向量發送給高層膠囊。低層膠囊改變標量權重cij ,輸出向量乘以該權重後,發送給高層膠囊,作為高層膠囊的輸入。關於權重cij ,需要知道有:
  • 權重均為非負標量
  • 對每個低層膠囊而言,所有權重cij 的總和等於1
  • 對每個低層膠囊而言,權重的數量等於高層膠囊的數量
  • 這些權重由迭代動態路由算法確定
低層膠囊將其輸出發送給對此表示「同意」的高層膠囊,算法偽碼如下:
權重更新可以用如下圖來直觀理解。
其中兩個高層膠囊的輸出用紫色向量 v1 和 v2 表示,橙色向量表示接受自某個低層膠囊的輸入,其他黑色向量表示接受其他低層膠囊的輸入。左邊的紫色輸出 v1 和橙色輸入 u1|1 指向相反的方向,所以它們並不相似,這意味着它們點積是負數,更新路由係數的時候將會減少 c11 。右邊的紫色輸出 v2 和橙色輸入 u2|1 指向相同方向,它們是相似的,因此更新參數的時候路由係數 c12 會增加。在所有高層膠囊及其所有輸入上重複應用該過程,得到一個路由參數集合,達到來自低層膠囊的輸出和高層膠囊輸出的最佳匹配。
採用多少次路由迭代?論文在MNIST和CIFAR數據集上檢測了一定範圍內的數值,得到以下結論:
  • 更多的迭代往往會導致過擬合
  • 實踐中建議使用3次迭代

整體框架

CapsNet由兩部分組成:編碼器和解碼器。前3層是編碼器,後3層是解碼器:
  • 第一層:卷積層
  • 第二層:PrimaryCaps(主膠囊)層
  • 第三層:DigitCaps(數字膠囊)層
  • 第四層:第一個全連接層
  • 第五層:第二個全連接層
  • 第六層:第三個全連接層

編碼器

編碼器接受一張28×28的MNIST數字圖像作為輸入,將它編碼為實例參數構成的16維向量。

卷積層

  • 輸入:28×28圖像(單色)
  • 輸出:20×20×256張量
  • 卷積核:256個步長為1的9×9×1的核
  • 激活函數:ReLU
PrimaryCaps層(32個膠囊)
  • 輸入:20×20×256張量
  • 輸出:6×6×8×32張量(共有32個膠囊)
  • 卷積核:8個步長為1的9×9×256的核/膠囊
DigitCaps層(10個膠囊)
  • 輸入:
    6×6×8×32張量
  • 輸出:
    16×10矩陣

損失函數

 解碼器

解碼器從正確的DigitCap中接受一個16維向量,並學習將其編碼為數字圖像(注意,訓練時候只採用正確的DigitCap向量,而忽略不正確的DigitCap)。解碼器用來作為正則子,它接受正確的DigitCap的輸出作為輸入,重建一張28×28像素的圖像,損失函數為重建圖像和輸入圖像之間的歐式距離。解碼器強制膠囊學習對重建原始圖像有用的特徵,重建圖像越接近輸入圖像越好,下面展示重建圖像的例子。
第一個全連接層
  • 輸入:16×10矩陣
  • 輸出:512向量
第二個全連接層
  • 輸入:512向量
  • 輸出:1024向量
第三個全連接層
  • 輸入:1024向量
  • 輸出:784向量

參考資料 

https://mp.weixin.qq.com/s?__biz=MzI3ODkxODU3Mg==&mid=2247484099&idx=1&sn=97e209f1a9860c8d8c51e81d98fc8a0a&chksm=eb4ee600dc396f16624a33cdfc0ead905e62ae9447b49b20146020e6cbd7d71f089101512a40&scene=21#wechat_redirect
https://mp.weixin.qq.com/s?__biz=MzI3ODkxODU3Mg==&mid=2247484165&idx=1&sn=0ca679e3a5f499f8d8addb405fe3df83&chksm=eb4ee7c6dc396ed0a330fcac12690110bcaf9a8a10794dbc5e1a326c69ecbb140140f55fd6ba&scene=21#wechat_redirect
https://mp.weixin.qq.com/s?__biz=MzI3ODkxODU3Mg==&mid=2247484433&idx=1&sn=3afe4605bc2501eebbc41c6dd1af9572&chksm=eb4ee0d2dc3969c4619d6c1097d5c949c76c6c854e60d36eba4388da2c3855747818d062c90a&scene=21#wechat_redirect
https://mp.weixin.qq.com/s/6CRSen8P6zKaMGtX8IRfqw
原文鏈接:
https://www.cnblogs.com/CZiFan/p/9803067.html

人工智能技術在防疫抗疫工作中大有用武之地

近期,新型冠狀病毒肺炎(NCP)的疫情突如其來,讓人們有些措手不及。但是為了實現更好的防疫抗疫效果,不少科研人員紛紛應用諸多技術手段來抗擊疫情。其中人工智能技術已成為這場防疫抗疫攻堅戰的有力武器之一;它在疫情防控、圖像分析、輔助診斷、疫苗研發等方面助力防疫抗疫工作。