為什么我們需要將了解邏輯作為應用程序架構中的新層次呢?
在很長一段時間里,事實上,典型業(yè)務應用程序的的結構是保持不變的。也許,在一些細節(jié)上,多少會有所不同,但解決方案的流程是一樣的,總是由客戶端,業(yè)務邏輯和數(shù)據(jù)管理層三方面所組成。
第一層是客戶端(用戶界面層),提供用戶與系統(tǒng)的友好訪問;第二層是應用服務層(也叫中間層),專司業(yè)務邏輯的實現(xiàn);第三層是數(shù)據(jù)源層(數(shù)據(jù)服務層,數(shù)據(jù)庫系統(tǒng)),負責數(shù)據(jù)信息的存儲、訪問及其優(yōu)化。由于業(yè)務邏輯被提取到應用服務層,大大降低了客戶端負擔,因此也成為瘦客戶(Thin Client)結構,三層結構在傳統(tǒng)的二層結構的基礎上增加了應用服務層,將應用邏輯單獨進行處理,從而使得用戶界面與應用邏輯位于不同的平臺上,兩者之間的通信協(xié)議由系統(tǒng)自行定義。通過這樣的結構設計,使得應用邏輯被所有用戶共享,這是兩層結構應用軟件與三層應用軟件之間最大的區(qū)別。三層結構將表示部分和業(yè)務邏輯部分按照客戶層和應用服務層相分離,客戶端和應用服務層、應用服務層和數(shù)據(jù)庫服務層之間的通訊、異構平臺之間的數(shù)據(jù)交換等都可以通過中間件或者相關程序來實現(xiàn)。當數(shù)據(jù)庫或者應用服務層的業(yè)務邏輯改變時,客戶端并不需要改變,反之亦然,大大提高了系統(tǒng)模塊的復用性,縮短開發(fā)周期,降低維護費用。
我們開始在大型機上運行的單片應用程序。 從那里,我們進步到客戶端/服務器體系結構,其業(yè)務邏輯分布在桌面應用程序和數(shù)據(jù)庫過程之間。這種方法后來被瀏覽器中運行的thin apps和位于中間層的業(yè)務邏輯所取代。 最終,中間層分為功能層和微服務的架構。
中間層 (Middle Tier)也稱作“應用程序服務器層或應用服務層”,是用戶接口或 Web 客戶端與數(shù)據(jù)庫之間的邏輯層。典型情況下 Web 服務器位于該層,業(yè)務對象在此實例化。中間層是生成并操作接收信息的業(yè)務規(guī)則和函數(shù)的集合。它們通過業(yè)務規(guī)則(可以頻繁更改)完成該任務,并由此被封裝到在物理上與應用程序程序邏輯本身相獨立的組件中。
除了基于瀏覽器的應用程序,我們現(xiàn)在有運行在移動設備以及嵌入式系統(tǒng)上的應用程序。 這種情況即將發(fā)生劇烈變化,而現(xiàn)代應用程序所需要管理的數(shù)據(jù)量的爆炸也正是這種動蕩背后的原因。
數(shù)據(jù)量增長曲線分為三個不同的階段:業(yè)務數(shù)據(jù)階段,人為數(shù)據(jù)階段、傳感器生成的數(shù)據(jù)階段。 經(jīng)典的應用程序體系結構對于業(yè)務數(shù)據(jù)處理是足夠的,因為它在人為生成的數(shù)據(jù)的下空間內(nèi)。但在傳感器生成的數(shù)據(jù)階段,則完全無法滿足處理傳感器生成的數(shù)據(jù)。
事實是,沒有一個人可以將一系列業(yè)務規(guī)則正式化、編碼化,這些業(yè)務規(guī)則需要從數(shù)百萬臺設備和傳感器實時流式傳輸?shù)拇罅繑?shù)據(jù)中,獲得有意義、可操作的洞察力。這是一個在當今電子商務,電子衛(wèi)生和Industry 4.0應用中相當普遍的情況。
當然,我們可以選擇忽略這一現(xiàn)實,保持一切正常。然而,我們必須達成協(xié)議,因為這將導致在快速變化的技術領域中落后于競爭對手,并以激烈的速度落后于競爭對手。或者,我們可能會接受這種改變,并尋找方法來改變應用程序架構,并將其提升為爆炸式的數(shù)據(jù)量挑戰(zhàn)。
輸入人工智能(AI)。
近期,對AI進行了大量的報道,有些樂極生悲的態(tài)勢。就應用程序開發(fā)而言,我們需要知道的是,AI是用于在非常大的歷史數(shù)據(jù)集中檢測模式的數(shù)學方法和算法的集合,并在呈現(xiàn)新數(shù)據(jù)時進行預測或推斷。
例如,一種深度學習算法可以用來檢測關于貓的圖片,這種檢測模式將組成的非常大的數(shù)據(jù)集的模式。這些模式可以被用來將以前看不見的圖像分類為有或沒有貓的圖片。這種檢測的模式過程稱為機器學習,它產(chǎn)生一個人工智能模型。這個模型可以被打包為一個服務,并被遠程調(diào)用,還可以被轉換成一個軟件,并嵌入到一個運行在移動設備上的應用程序中。
深度學習(Deep Learning)是一種機器學習的方法,它試圖使用包含復雜結構或由多重非線性變換構成的多個處理層(神經(jīng)網(wǎng)絡)對數(shù)據(jù)進行高層抽象的算法。
神經(jīng)網(wǎng)絡是一組大致模仿人類大腦構造設計的算法,用于識別模式。神經(jīng)網(wǎng)絡通過機器感知系統(tǒng)解釋傳感器數(shù)據(jù),能夠?qū)υ驾斎脒M行標記或聚類等操作。神經(jīng)網(wǎng)絡所能識別的模式是數(shù)值形式,因此圖像、聲音、文本、時間序列等一切現(xiàn)實世界的數(shù)據(jù)必須轉換為數(shù)值。在深度學習網(wǎng)絡中,每一個節(jié)點層在前一層輸出的基礎上學習識別一組特定的特征。隨著神經(jīng)網(wǎng)絡深度增加,節(jié)點所能識別的特征也就越來越復雜,因為每一層會整合并重組前一層的特征。
多層次的神經(jīng)網(wǎng)絡是實現(xiàn)深度學習的基礎,那么與傳統(tǒng)的神經(jīng)網(wǎng)絡比較,深層神經(jīng)網(wǎng)絡又哪些特點呢?深度學習又是如何在深層神經(jīng)網(wǎng)絡上展開的呢?
與傳統(tǒng)的神經(jīng)網(wǎng)絡相同的是,深層神經(jīng)網(wǎng)絡也包括輸入層、隱層和輸出層,也只有相鄰層級之間的神經(jīng)元有鏈接通道,同一層及跨層之間是沒有鏈接的。區(qū)別在于,深層神經(jīng)網(wǎng)絡具有更多層級數(shù)量,并且具有更有效的算法,更加接近人腦的結構,這使得深層神經(jīng)網(wǎng)絡能夠處理更加復雜的輸入信息,深度學習就是在這個多層級的人工神經(jīng)網(wǎng)絡上進行的。
在搞清楚深層神經(jīng)網(wǎng)絡如何進行深度學習之前,還要區(qū)別兩個重要的概念:監(jiān)督學習和非監(jiān)督學習。簡單而言,監(jiān)督學習就是有人指出學習結果正確與否的學習。想象一下,當幼兒第一次看到蘋果的時候,會建立一個包含蘋果各種特征的概念;當下一次再看到蘋果時,會加入對蘋果新的概念,例如蘋果并不都是紅色的,還有黃色的、白色的、綠色的蘋果,還有多種顏色混合的蘋果。這期間,有可能會看到梨、橙子、乒乓球等與蘋果在某些特征上相似的物體,幼兒可能把這些東西也認為是蘋果,家長會指出錯誤,幼兒調(diào)整對蘋果的認識,判斷越來越準確。是不是很簡單,這其實也是半個多世紀之前“感知機”的工作原理,通過不斷優(yōu)化不同輸入信息的權重以實現(xiàn)更加準確的判斷。
上述監(jiān)督學習的過程,很容易忽略一個重要的前提條件,機器為什么知道通過形狀或者顏色去判斷一個物體是不是蘋果,形狀、顏色、氣味是人基于經(jīng)驗對蘋果賦予的“特征”屬性,但機器并不知道這些就是蘋果的特征。過去,一般由人來幫助機器先期定義“特征”,但由人參與對“特征”的選取是一件極其繁瑣和耗費時間的工作,并且在面對未知事物的時候,一開始也無規(guī)律可循。在輸入信息越來越復雜的情況下,人工選取特征已經(jīng)難以為繼了,由機器自動學習特征似乎是更好的做法,多層神經(jīng)網(wǎng)絡上進行的非監(jiān)督學習能夠完成這一過程。
非監(jiān)督就如同一個沒有家長在旁邊指導的幼兒學習過程,其目的是推斷出信息的內(nèi)在數(shù)據(jù)規(guī)律。例如,幼兒在看到很多次蘋果之后,會把具有一些圓形、紅色、特殊味道的一類物體歸為一類(雖然并不知道這就叫蘋果)并與其他的水果區(qū)別開來,這個過程一是實現(xiàn)了聚類,更重要的是完成了特征學習,幼兒知道應該抓住哪些“特征”來判斷一個物體是不是蘋果。機器的非監(jiān)督學習有類似的過程,在多層人工神經(jīng)網(wǎng)絡上對每一層級進行非監(jiān)督學習,這是深度學習與傳統(tǒng)神經(jīng)網(wǎng)絡最大區(qū)別,這一過程被稱作特征學習。
我們可以總結出一個簡化的深度學習過程:在深層神經(jīng)網(wǎng)絡中,采用無監(jiān)督學習對每一層逐層進行訓練,讓機器不斷學習這一層次需要識別的特征;每一層訓練的結果作為更高一層集的輸入信息直至最頂層;在最頂層,使用監(jiān)督學習自上而下對各個層級的參數(shù)、權重、模型、算法進行微調(diào)。這一過程反復進行,直到達到一定準確度。與傳統(tǒng)的機器學習比較,深度學習能夠不需要人類幫助提取特征,這提高了學習的自主性和學習效果。
在實際應用中,對圖像的識別、對聲音的識別,或者像AlphaGo那樣學習圍棋采用的具體方法有很多,但大致的原理是相同的,只是過程和算法更加復雜。
應用可能需要訪問幾個這樣的模型以執(zhí)行圖像分類,語音識別,內(nèi)容個性化,欺詐檢測和其他任務。 將這些模型放在一起,這些模型在應用程序架構中形成了一個新的組件 - 所謂的“學習邏輯” - 而不是業(yè)務邏輯。
應用程序開發(fā)人員一直在構建前端,業(yè)務邏輯和數(shù)據(jù)層組件。 軟件設計,開發(fā),測試,部署和管理流程的每一步都經(jīng)過優(yōu)化和完善。該工具集是廣泛和非常知名的。
另一方面,對于工業(yè)規(guī)模的學習邏輯發(fā)展知之甚少。
首先,AI模型由數(shù)據(jù)科學家創(chuàng)建,而不是應用程序開發(fā)人員。 這些數(shù)據(jù)科學家只有很少一部分是軟件工程師,他們中的大部分是物理學,數(shù)學,微生物學,經(jīng)濟學和其他非計算機領域高級學位的“真實”科學家。數(shù)據(jù)科學家用來創(chuàng)建AI模型的工具集和過程與軟件工程師使用的工具集和過程非常不同。
與可重復使用的軟件模塊不同,除了少數(shù)例外,在一個應用程序域中對數(shù)據(jù)進行培訓的模型不能輕易轉移到另一個域,模型往往隨著時間的推移而衰減。
隨著基礎數(shù)據(jù)的變化,模式需要重新學習,模型需要更新。為了確保性能一致和高水平的服務,模型生命周期管理必須與整體應用生命周期管理相結合。
那隱私和安全呢? 在安全環(huán)境中對敏感數(shù)據(jù)進行培訓的模型能否在更安全的環(huán)境中部署到更廣泛的用戶群體?這些只是將學習的邏輯組件添加到應用程序架構時必須考慮的一些問題。對于這些問題,并沒有一致的答案。
在這一點上,早期采用者和創(chuàng)新者正在經(jīng)歷痛苦的試錯發(fā)現(xiàn)過程。 他們正在開發(fā)自己的工具和流程,整合兩個領域:軟件工程和機器學習。
如果能從過去的發(fā)展中能夠看出,最終他們的辛勤工作將為具有廣泛認知能力的新一類應用程序帶來新的平臺。在此領域,商機是巨大,比賽已經(jīng)開始,你是否已經(jīng)做好準備?