【27】什么是端到端的深度學習?


什么是端到端的深度學習?(What is end-to-end deep learning?)

深度學習中最令人振奮的最新動態之一就是端到端深度學習的興起,那么端到端學習到底是什么呢?

簡而言之,以前有一些數據處理系統或者學習系統,它們需要多個階段的處理。那么端到端深度學習就是忽略所有這些不同的階段,用單個神經網絡代替它。

我們來看一些例子,以語音識別為例,你的目標是輸入x,比如說一段音頻,然后把它映射到一個輸出y,就是這段音頻的聽寫文本。

所以傳統上,語音識別需要很多階段的處理。首先你會提取一些特征,一些手工設計的音頻特征,也許你聽過MFCC,這種算法是用來從音頻中提取一組特定的人工設計的特征。在提取出一些低層次特征之后,你可以應用機器學習算法在音頻片段中找到音位,所以音位是聲音的基本單位,比如說“Cat”這個詞是三個音節構成的,Cu-、Ah-和Tu-,算法就把這三個音位提取出來,然后你將音位串在一起構成獨立的詞,然后你將詞串起來構成音頻片段的聽寫文本。

所以和這種有很多階段的流水線相比,端到端深度學習做的是,你訓練一個巨大的神經網絡,輸入就是一段音頻,輸出直接是聽寫文本。

AI的其中一個有趣的社會學效應是,隨着端到端深度學習系統表現開始更好,有一些花了大量時間或者整個事業生涯設計出流水線各個步驟的研究員,還有其他領域的研究員,不只是語言識別領域的,也許是計算機視覺,還有其他領域,他們花了大量的時間,寫了很多論文,有些甚至整個職業生涯的一大部分都投入到開發這個流水線的功能或者其他構件上去了。

而端到端深度學習就只需要把訓練集拿過來,直接學到了x和y之間的函數映射,直接繞過了其中很多步驟。對一些學科里的人來說,這點相當難以接受,他們無法接受這樣構建AI系統,因為有些情況,端到端方法完全取代了舊系統,某些投入了多年研究的中間組件也許已經過時了。

事實證明,端到端深度學習的挑戰之一是,你可能需要大量數據才能讓系統表現良好,比如,你只有3000小時數據去訓練你的語音識別系統,那么傳統的流水線效果真的很好。但當你擁有非常大的數據集時,比如10,000小時數據或者100,000小時數據,這樣端到端方法突然開始很厲害了。

所以當你的數據集較小的時候,傳統流水線方法其實效果也不錯,通常做得更好。你需要大數據集才能讓端到端方法真正發出耀眼光芒。如果你的數據量適中,那么也可以用中間件方法,你可能輸入還是音頻,然后繞過特征提取,直接嘗試從神經網絡輸出音位,然后也可以在其他階段用,所以這是往端到端學習邁出的一小步,但還沒有到那里。

這張圖上是一個研究員做的人臉識別門禁,是百度的林元慶研究員做的。

這是一個相機,它會拍下接近門禁的人,如果它認出了那個人,門禁系統就自動打開,讓他通過,所以你不需要刷一個RFID工卡就能進入這個設施。系統部署在越來越多的中國辦公室,希望在其他國家也可以部署更多,你可以接近門禁,如果它認出你的臉,它就直接讓你通過,你不需要帶RFID工卡。

那么,怎么搭建這樣的系統呢?你可以做的第一件事是,看看相機拍到的照片,對吧?我想我畫的不太好,但也許這是相機照片,你知道,有人接近門禁了,所以這可能是相機拍到的圖像x。有件事你可以做,就是嘗試直接學習圖像x到人物y身份的函數映射,事實證明這不是最好的方法。

其中一個問題是,人可以從很多不同的角度接近門禁,他們可能在綠色位置,可能在藍色位置。有時他們更靠近相機,所以他們看起來更大,有時候他們非常接近相機,那照片中臉就很大了。

在實際研制這些門禁系統時,他不是直接將原始照片喂到一個神經網絡,試圖找出一個人的身份。

相反,迄今為止最好的方法似乎是一個多步方法, 首先,你運行一個軟件來檢測人臉,所以第一個檢測器找的是人臉位置,檢測到人臉,然后放大圖像的那部分,並裁剪圖像,使人臉居中顯示,然后就是這里紅線框起來的照片,再喂到神經網絡里,讓網絡去學習,或估計那人的身份。

研究人員發現,比起一步到位,一步學習,把這個問題分解成兩個更簡單的步驟。

首先,是弄清楚臉在哪里。第二步是看着臉,弄清楚這是誰。這第二種方法讓學習算法,或者說兩個學習算法分別解決兩個更簡單的任務,並在整體上得到更好的表現。

順便說一句,如果你想知道第二步實際是怎么工作的,我這里其實省略了很多。

訓練第二步的方式,訓練網絡的方式就是輸入兩張圖片,然后你的網絡做的就是將輸入的兩張圖比較一下,判斷是否是同一個人。比如你記錄了10,000個員工ID,你可以把紅色框起來的圖像快速比較……也許是全部10,000個員工記錄在案的ID,看看這張紅線內的照片,是不是那10000個員工之一,來判斷是否應該允許其進入這個設施或者進入這個辦公樓。這是一個門禁系統,允許員工進入工作場所的門禁。

為什么兩步法更好呢?實際上有兩個原因。

一是,你解決的兩個問題,每個問題實際上要簡單得多。但第二,兩個子任務的訓練數據都很多。具體來說,有很多數據可以用於人臉識別訓練,對於這里的任務1來說,任務就是觀察一張圖,找出人臉所在的位置,把人臉圖像框出來,所以有很多數據,有很多標簽數據(x,y),其中x是圖片,y是表示人臉的位置,你可以建立一個神經網絡,可以很好地處理任務1。

然后任務2,也有很多數據可用,今天,業界領先的公司擁有,比如說數百萬張人臉照片,所以輸入一張裁剪得很緊湊的照片,比如這張紅色照片,下面這個,今天業界領先的人臉識別團隊有至少數億的圖像,他們可以用來觀察兩張圖片,並試圖判斷照片里人的身份,確定是否同一個人,所以任務2還有很多數據。相比之下,如果你想一步到位,這樣(x,y)的數據對就少得多,其中x是門禁系統拍攝的圖像,y是那人的身份,因為你沒有足夠多的數據去解決這個端到端學習問題,但你卻有足夠多的數據來解決子問題1和子問題2。

實際上,把這個分成兩個子問題,比純粹的端到端深度學習方法,達到更好的表現。不過如果你有足夠多的數據來做端到端學習,也許端到端方法效果更好。但在今天的實踐中,並不是最好的方法。

 

 

我們再來看幾個例子,比如機器翻譯。傳統上,機器翻譯系統也有一個很復雜的流水線,比如英語機翻得到文本,然后做文本分析,基本上要從文本中提取一些特征之類的,經過很多步驟,你最后會將英文文本翻譯成法文

因為對於機器翻譯來說的確有很多(英文,法文)的數據對,端到端深度學習在機器翻譯領域非常好用,那是因為在今天可以收集x-y對的大數據集,就是英文句子和對應的法語翻譯。所以在這個例子中,端到端深度學習效果很好。

最后一個例子,比如說你希望觀察一個孩子手部的X光照片,並估計一個孩子的年齡。

你知道,當我第一次聽到這個問題的時候,我以為這是一個非常酷的犯罪現場調查任務,你可能悲劇的發現了一個孩子的骨架,你想弄清楚孩子在生時是怎么樣的。事實證明,這個問題的典型應用,從X射線圖估計孩子的年齡,是我想太多了,沒有我想象的犯罪現場調查腦洞那么大,結果這是兒科醫生用來判斷一個孩子的發育是否正常。

處理這個例子的一個非端到端方法,就是照一張圖,然后分割出每一塊骨頭,所以就是分辨出那段骨頭應該在哪里,那段骨頭在哪里,那段骨頭在哪里,等等。然后,知道不同骨骼的長度,你可以去查表,查到兒童手中骨頭的平均長度,然后用它來估計孩子的年齡,所以這種方法實際上很好。

相比之下,如果你直接從圖像去判斷孩子的年齡,那么你需要大量的數據去直接訓練。據我所知,這種做法今天還是不行的,因為沒有足夠的數據來用端到端的方式來訓練這個任務。

你可以想象一下如何將這個問題分解成兩個步驟,第一步是一個比較簡單的問題,也許你不需要那么多數據,也許你不需要許多X射線圖像來切分骨骼。而任務二,收集兒童手部的骨頭長度的統計數據,你不需要太多數據也能做出相當准確的估計,所以這個多步方法看起來很有希望,也許比端對端方法更有希望,至少直到你能獲得更多端到端學習的數據之前。

所以端到端深度學習系統是可行的,它表現可以很好,也可以簡化系統架構,讓你不需要搭建那么多手工設計的單獨組件,但它也不是靈丹妙葯,並不是每次都能成功。

在下一個筆記中,我想與你分享一個更系統的描述,什么時候你應該使用或者不應該使用端到端的深度學習,以及如何組裝這些復雜的機器學習系統。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM