人工智能(AI)
? ? AI,即賦予計算機能夠自動處理人類世界常規(guī)勞動,理解語音或圖像,幫助醫(yī)學(xué)診斷等能力。
? ? 它是研究、開發(fā)用于模擬、延伸和擴展人的智能的理論、方法、技術(shù)及應(yīng)用系統(tǒng)的一門新的技術(shù)科學(xué)。
? ? 前人在探索該問題時,一個想法是:將世界的知識用形式化的語言進行硬編碼,計算機可以使用邏輯推理規(guī)則來自動理解這些形式化語言中的申明。這就是AI的知識庫(knowledgebase)方法。
機器學(xué)習(xí)
? ?機器學(xué)習(xí)(Machine? Learning)是一門專門研究計算機怎樣模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為,以獲取新的知識或技能,重新組織已有的知識結(jié)構(gòu)市值不斷改善自身的性能的學(xué)科,簡單地說,機器學(xué)習(xí)就是通過算法,使得機器能從大量的歷史數(shù)據(jù)中學(xué)習(xí)規(guī)律,從而對新的樣本做智能識別或預(yù)測未來。
? ? 常用機器學(xué)習(xí)算法,很大程度上依賴于給定的數(shù)據(jù)表示,即特征工程。在廣告預(yù)測系統(tǒng)中,AI 不會像人一樣去看某條廣告,而是需要人類告訴AI系統(tǒng)幾條關(guān)鍵信息,比如該廣告主信息、廣告類別、推送人群相關(guān)度等。
表示學(xué)習(xí)
? ? 我們很難判斷如何設(shè)計特征,一個思路就是使用機器學(xué)習(xí)來發(fā)掘特征本身,而不僅僅是把特征映射到輸出。這稱作表示學(xué)習(xí)。學(xué)習(xí)到的特征往往比手動設(shè)計特征更好,而且人工干預(yù)少。手動設(shè)計特征非常耗費時間,可遇不可求。
? ?經(jīng)典案例:自編碼器。它由一個編碼器和解碼器函數(shù)組成。編碼器函數(shù)將輸入數(shù)據(jù)轉(zhuǎn)化為一種新的不同表示,解碼器函數(shù)將這個新的表示轉(zhuǎn)換到原先形式。我們期望的是:輸入數(shù)據(jù)經(jīng)過編、解碼器之后盡可能多保留信息,而且新的表示有各種好的特性。所謂好的特征,就是指有助于分類器的。
深度學(xué)習(xí)
? ? 自2006年,深度學(xué)習(xí)(DeepLearning)已經(jīng)成為機器學(xué)習(xí)研究中的一個新興領(lǐng)域,通常也被叫做深層結(jié)構(gòu)學(xué)習(xí)或分層學(xué)習(xí)。其動機在于建立、模擬人腦進行分析學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),它模擬人腦的機制來解釋數(shù)據(jù),例如圖像,聲音和文本,深度學(xué)習(xí)是無監(jiān)督學(xué)習(xí)的一種。
????深度學(xué)習(xí)的概念源于人工神經(jīng)網(wǎng)絡(luò)的研究,含多隱層的多層感知器就是一種深度學(xué)習(xí)結(jié)構(gòu)。深度學(xué)習(xí)通過組合低層特征形成更加抽象的高層表示屬性類別或特征,已發(fā)現(xiàn)數(shù)據(jù)的分布式特征表示。

人腦的視覺機理
?????1981年的諾貝爾醫(yī)學(xué)獎獲得者David Hubel和Torsten Wiesel發(fā)現(xiàn)了視覺系統(tǒng)的信息處理機制,他們發(fā)現(xiàn)了一種被稱為“方向選擇性細(xì)胞的神經(jīng)元細(xì)胞,當(dāng)瞳孔發(fā)現(xiàn)了眼前的物體的邊緣,而且這個邊緣指向某個方向時,這種神經(jīng)元細(xì)胞就會活躍。

????由此可知人的視覺系統(tǒng)的信息處理是分級的,高層的特征是低層特征的組合,從低層到高層的特征表示越來越抽象,越來越能表現(xiàn)語義或者意圖,抽象層面越高,存在的可能猜測就越少,就越利于分類。

深度學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)的異同


線性代數(shù)要點
????線性代數(shù)中,由單獨的數(shù)a構(gòu)成的元素被稱為標(biāo)量(scalar):一個標(biāo)量a可以是整數(shù)、實數(shù)或復(fù)數(shù)
????如果多個標(biāo)量a1,a2,…,an按照一定順序組成一個序列,這樣的元素就被稱為向量(vector)
????每個向量都由若干標(biāo)量構(gòu)成,如果將向量的所有標(biāo)量都替換成相同規(guī)格的向量,得到的就是矩陣(matrix)
????同理如果將矩陣中的每個標(biāo)量元素再替換為向量的話,得到的就是張量(tensor),直觀地理解,張量就是高階的矩陣
????線性代數(shù)的本質(zhì)在于將具體書屋抽象為數(shù)學(xué)對象,并描述其靜止和動態(tài)特性;
????向量的實質(zhì)是n維線性空間中的靜止點;?
????線性變換描述了向量或作為參考系的坐標(biāo)系的變化,可以用矩陣表示;
? ? 矩陣的特征值和特征向量描述了 變化的速度與方向(Ax=λx)
概率論要點
????從事件發(fā)生的頻率認(rèn)識概率的方法被稱為“頻率學(xué)派”,頻率學(xué)派口中的“概率”,其實是一個可獨立重復(fù)的隨機實驗中單個結(jié)果出現(xiàn)頻率的極限




????概率論關(guān)注的是生活中的不確定性和可能性
????頻率學(xué)派認(rèn)為先驗分布是固定的,模型參數(shù)要靠最大似然估計計算
????貝葉斯學(xué)派認(rèn)為先驗分布是隨機的,模型參數(shù)要靠后驗概率最大化計算
????正態(tài)分布是最重要的一種隨機變量的分布
數(shù)理統(tǒng)計要點
????數(shù)理統(tǒng)計的任務(wù)是根據(jù)可觀察的樣本反過來推斷總體的性質(zhì)
????推斷的工具是統(tǒng)計量,統(tǒng)計量是樣本的函數(shù),是個隨機變量
????參數(shù)估計通過隨機抽取的樣本來估計總體分布的未知參數(shù),包括點估計和區(qū)間估計
????假設(shè)檢驗通過隨機抽取的樣本來接受或拒絕關(guān)于總體的某個判斷,常用于估計機器學(xué)習(xí)模型的泛化錯誤率
概率論的前提是隨機變量的分布已知,根據(jù)已知的分布來分析隨機變量的特征與規(guī)律;數(shù)理統(tǒng)計的研究對象則是未知分布的隨機變量,研究方法是對隨機變量的進行獨立重復(fù)的觀察,根據(jù)得到的觀察結(jié)果對原始分布做出推斷。
機器學(xué)習(xí)過程
????計算圓的面積顯然是一個很簡單的問題,任何程序員應(yīng)該都能立馬寫出類似以下的函數(shù)來進行計算:

現(xiàn)在讓你看看如何讓機器通過“學(xué)習(xí)”來計算圓的面積:

????我們提供給機器足夠的訓(xùn)練數(shù)據(jù)data,比如下面這樣:

????然后learn函數(shù)(我們暫時不知道如何實現(xiàn)這個函數(shù),之后的實驗我們會逐步實現(xiàn)這個函數(shù))使用這些數(shù)據(jù)去訓(xùn)練模型model(我們接下來會介紹如何構(gòu)建這個model),當(dāng)我們需要計算一個新的圓的面積時,就調(diào)用test函數(shù),根據(jù)訓(xùn)練好的模型去計算其面積。注意這里我們不需要事先知道輸入和輸出之間的關(guān)系,也不需要手動設(shè)置任何參數(shù),只要把數(shù)據(jù)“喂給”學(xué)習(xí)算法learn,它就會自動得出一個能夠解決問題的模型。也就是說,在訓(xùn)練過程中,模型model其實是“學(xué)習(xí)”到了輸入和輸出之前的關(guān)系以及相關(guān)的參數(shù)。就像是一個數(shù)學(xué)家通過對圓的觀察,得出了圓的面積和半徑的關(guān)系,并且求出了圓周率。
????上面我們提到過要讓機器“學(xué)習(xí)”,一般需要:
????????1.用來解決問題的模型model
????????2.學(xué)習(xí)數(shù)據(jù)(或者說訓(xùn)練數(shù)據(jù))data
????????3.讓模型model通過數(shù)據(jù)data學(xué)會解決特定問題的學(xué)習(xí)算法learn
????自下而上的非監(jiān)督學(xué)習(xí):從底層開始,一層一層的往頂層訓(xùn)練,分別得到各層參數(shù)。采用無標(biāo)簽數(shù)據(jù)分層訓(xùn)練各層參數(shù)(可以看作是特征學(xué)習(xí)的過程)。
????自上而下的監(jiān)督學(xué)習(xí):基于第一步的得到的各層參數(shù)進一步調(diào)整整個多層模型的參數(shù),這一步是一個有監(jiān)督的訓(xùn)練過程。
有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)
????有監(jiān)督與無監(jiān)督是機器學(xué)習(xí)方法的兩大分類。有監(jiān)督學(xué)習(xí)輸入data既包含輸入x,又包含x對應(yīng)的y,即學(xué)習(xí)數(shù)據(jù)已經(jīng)事先給出了正確答案。無監(jiān)督學(xué)習(xí)則是只有輸入x。無監(jiān)督學(xué)習(xí)目前一般用于聚類(cluster)問題,即給定一批數(shù)據(jù),根據(jù)這批數(shù)據(jù)的特點,將其分為多個類別,雖然我并不知道這每個類別所代表的具體含義。比如網(wǎng)絡(luò)商城的商品推薦算法可能會根據(jù)用戶的使用習(xí)慣,以往的瀏覽歷史等,將用戶分為多個類別,同一類別的用戶在行為模式上可能比較相似。而事先并不知道最終會劃分出多少個類別,每個類別有哪些共同特點。
深度學(xué)習(xí)的幾種常用模型
????Auto Encoder(自動編碼器)
????Sparse Coding (稀疏編碼)
????Restricted Boltzmann Machine(限制玻爾茲曼機)
????Deep Belief Networks (深度信任網(wǎng)絡(luò))
????Convolutional Neural Networks (卷積神經(jīng)網(wǎng)絡(luò))
????Recurrent Neural Networks(循環(huán)神經(jīng)網(wǎng)絡(luò))
????Convolutional Neural Networks(CNN)
????卷積神經(jīng)網(wǎng)絡(luò)是人工神經(jīng)網(wǎng)絡(luò)的一種,已成為當(dāng)前語音分析和圖像識別領(lǐng)域的研究熱點。它的權(quán)值共享網(wǎng)絡(luò)結(jié)構(gòu)使之更類似于生物神經(jīng)網(wǎng)絡(luò),降低了網(wǎng)絡(luò)模型的復(fù)雜度,減少了權(quán)值的數(shù)量。該優(yōu)點在網(wǎng)絡(luò)的輸入是多維圖像時表現(xiàn)的更為明顯,使圖像可以直接作為網(wǎng)絡(luò)的輸入,避免了傳統(tǒng)識別算法中復(fù)雜的特征提取和數(shù)據(jù)重建過程。卷積網(wǎng)絡(luò)是為識別二維形狀而特殊設(shè)計的一個多層感知器,這種網(wǎng)絡(luò)結(jié)構(gòu)對平移、比例縮放、傾斜或者共他形式的變形具有高度不變性。
卷積神經(jīng)網(wǎng)絡(luò)原理圖
????如圖所示,輸入圖像(Input)通過和三個可訓(xùn)練的卷積核和可加偏置進行卷積,卷積后在C1層產(chǎn)生三個特征映射圖(Feature map)然后,C1層的Feature map在經(jīng)過子采樣(Subsampling)后,加權(quán)值,加偏置,再通過一個Sigmoid函數(shù)得到三個S2層的特征映射圖。

CNN的Convolution過程
????如圖,原圖像是5*5大小,有25個神經(jīng)元,用一個3*3的卷積核對它進行卷積,得到了如右圖所示的卷積后的Feature map。該特征圖大小為3*3。

????假設(shè)一種卷積核只提取出圖像的一種特征,所以一般要多個卷積核來提取不同的特征,所以每一層一般都會有多張Feature map。同一張Feature map上的神經(jīng)元共用一個卷積核,這大大減少了網(wǎng)絡(luò)參數(shù)的個數(shù)。
CNN的Pooling過程
????圖像具有一種“靜態(tài)性(stationarity)”的屬性,可以對圖像某一個區(qū)域上的特征取平均值 (或最大值)。這種聚合的操作就叫做池化 (pooling)。

????如果人們選擇圖像中的連續(xù)范圍作為池化區(qū)域,并且只是池化相同(重復(fù))的隱藏單元產(chǎn)生的特征,那么,這些池化單元就具有平移不變性(translation invariant)。這就意味著即使圖像經(jīng)歷了一個小的平移之后,依然會產(chǎn)生相同的(池化的)特征。
CNN的優(yōu)點
????如下圖所示,如果我們有1000x1000像素的圖像,有1百萬個隱層神經(jīng)元,那么他們?nèi)B接的話(每個隱層神經(jīng)元都連接圖像的每一個像素點),就有個連接,也就是10^12個權(quán)值參數(shù)。

????卷積神經(jīng)網(wǎng)絡(luò)避免了顯式的特征取樣,隱式地從訓(xùn)練數(shù)據(jù)中進行學(xué)習(xí)。這使得卷積神經(jīng)網(wǎng)絡(luò)明顯有別于其他基于神經(jīng)網(wǎng)絡(luò)的分類器,通過結(jié)構(gòu)重組和減少權(quán)值將特征提取功能融合進多層感知器。它可以直接處理灰度圖片,能夠直接用于處理基于圖像的分類。
????????卷積神經(jīng)網(wǎng)絡(luò)較一般神經(jīng)網(wǎng)絡(luò)在圖像處理方面有如下優(yōu)點:
?????????????a)輸入圖像和網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)能很好的吻合;
????????????b)特征提取和模式分類同時進行,并同時在訓(xùn)練中產(chǎn)生;
????????????c)權(quán)重共享可以減少網(wǎng)絡(luò)的訓(xùn)練參數(shù),使神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)變得更簡單,適應(yīng)性更強。
RNN網(wǎng)絡(luò)結(jié)構(gòu)
????RNN網(wǎng)絡(luò)在某一個節(jié)點或某一時刻?t?(以下統(tǒng)稱為某一時刻?t?),輸入網(wǎng)絡(luò)的參數(shù)還有外界的信號?x(t)?,有?s(t)=f(s(t?1),x(t);θ)。
????在式子中有不變的參數(shù)?θ?, x(t)?為?t?時刻的輸入?yún)?shù),通過保證?θ?使得整個網(wǎng)絡(luò)可以進行權(quán)值共享,每一階段通過參數(shù)將前一階段的狀態(tài)導(dǎo)入。
????在圖中黃色框標(biāo)注的部分為網(wǎng)絡(luò)的一個計算圖,也可以將其稱作為一個細(xì)胞體。計算圖其實質(zhì)上是用來描述一個函數(shù)方法的模塊,也等同于一個數(shù)據(jù)處理“ 盒子 ”。每一個計算圖有輸入和輸出的數(shù)據(jù),同時在某一時刻的計算圖的數(shù)據(jù)對下一時刻計算圖造成影響。x(t)?為?t?時刻的輸入?yún)?shù),h(t)?為隱藏層的激活函數(shù),o(t)?為?t?時刻的輸出參數(shù),?L(t)?為網(wǎng)絡(luò)的損失值,?y(t)?為目標(biāo)函數(shù)。通過將網(wǎng)絡(luò)展開,能夠較好的看到對于一個序列?x(t)?,可以使用?RNN?循環(huán)神經(jīng)網(wǎng)絡(luò)進行處理,網(wǎng)絡(luò)具有聯(lián)想能力,可以將之前的信息加以保存,并在之后的循環(huán)中進行調(diào)用。

TensorFlow
????TensorFlow 是世界上最受歡迎的開源機器學(xué)習(xí)框架,它具有快速、靈活并適合產(chǎn)品級大規(guī)模應(yīng)用等特點,讓每個開發(fā)者和研究者都能方便地使用人工智能來解決多樣化的挑戰(zhàn)。
????TensorFlow是谷歌基于DistBelief進行研發(fā)的第二代人工智能學(xué)習(xí)系統(tǒng),其命名來源于本身的運行原理。Tensor(張量)意味著N維數(shù)組,F(xiàn)low(流)意味著基于數(shù)據(jù)流圖的計算,TensorFlow為張量從流圖的一端流動到另一端計算過程。TensorFlow是將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)傳輸至人工智能神經(jīng)網(wǎng)中進行分析和處理過程的系統(tǒng)。
????TensorFlow可被用于語音識別或圖像識別等多項機器學(xué)習(xí)和深度學(xué)習(xí)領(lǐng)域,對2011年開發(fā)的深度學(xué)習(xí)基礎(chǔ)架構(gòu)DistBelief進行了各方面的改進,它可在小到一部智能手機、大到數(shù)千臺數(shù)據(jù)中心服務(wù)器的各種設(shè)備上運行。TensorFlow將完全開源,任何人都可以用。
TensorFlow Lite
????TensorFlow Lite是GoogleI/O 2017 大會上的其中一個重要宣布,有了TensorFlowLite,應(yīng)用開發(fā)者可以在移動設(shè)備上部署人工智能。Google 表示 Lite版本TensorFlow是TensorFlowMobile 的一個延伸版本。盡管是一個輕量級版本,依然是在智能手機和嵌入式設(shè)備上部署深度學(xué)習(xí)的一大動作。此前,通過TensorFlow Mobile API,TensorFlow已經(jīng)支持手機上的模型嵌入式部署。TensorFlow Lite應(yīng)該被視為TensorFlow Mobile的升級版。
????TensorFlowLite 目前仍處于“積極開發(fā)”狀態(tài),目前僅有少量預(yù)訓(xùn)練AI模型面世,比如MobileNet、用于計算機視覺物體識別的Inception v3、用于自然語言處理的SmartReply,當(dāng)然,TensorFlowLite上也可以部署用自己的數(shù)據(jù)集定制化訓(xùn)練的模型。
????TensorFlowLite可以與Android 8.1中發(fā)布的神經(jīng)網(wǎng)絡(luò)API完美配合,即便在沒有硬件加速時也能調(diào)用CPU處理,確保模型在不同設(shè)備上的運行。而Android端版本演進的控制權(quán)是掌握在谷歌手中的,從長期看,TensorFlowLite會得到Android系統(tǒng)層面上的支持。


? ? ? ? ?AutoFitTextureView:一個自定義View;
????????CameraActivity:整個app的入口activity,這個activity只做了一件事,就是加載了一個fragment;?
????????Camera2BasicFragment: 入口activity中加載的fragment,其中實現(xiàn)了所有跟UI相關(guān)的代碼;首先在onActivityCreated中,初始化了一個ImageClassifier對象,此類是整個demo的核心,用于加載模型并實現(xiàn)推理運算功能。然后開啟了一個后臺線程,在線程中反復(fù)地對從攝像頭獲取的圖像進行分類操作。
????????ImageClassifierQuantizedMobileNet是ImageClassifier的具體實現(xiàn),定義了model數(shù)據(jù)和label的路徑


