AI轉型中的思考和洞見
AI(人工智慧)時代已經來臨
應公司卓越技術委員會(TEC)的要求,本人一直利用工作之餘的時間在學習深度學習和Keras。下面結合我自己獲得的資訊,給大家分享一下我對AI轉型中的一些思考和洞見,我們知道AI(Artificial Intelligence)其實是一個很廣泛的概念,根據AI的英文定義,Artificial Intelligence implies a machine that can reason。 翻譯成中文的意思就是,人工智慧就是一個機器,其能進行邏輯推理。其一般具備下面5種能力:
Reasoning: the ability to solve problems through logical deduction
Knowledge: the ability to represent knowledge about the world
Planning: the ability to set and achieve goals
Communication: the ability to understand written and spoken language.
Perception: the ability to deduce things about the world from visual images, sounds and other sensory inputs.
從上面的英文來看,其實人工智慧就是研究一種機器,其能夠進行自我的邏輯推理,而且能夠把現實世界通過知識描述和表達出來,同時還能自我設定目標並達成自己設定的目標;另外,不但能理解書面和口頭的語言,還能通過對認知世界中的圖形,聲音以及其他途徑感知的資訊進行歸納推演等。
Oh,我的神啊!!! 這不就是活脫脫的一個人嗎?一個高階人類嗎? 在10年前,我們肯定感覺這是可望而不可及的,但是隨著alpha go在韓國大敗圍棋高手之後,其人工智慧才慢慢的被巨鱷資本家,卓有遠見的政客,企業界,風投界,甚至平民百姓所瞭解並震驚。
第一次工業革命,蒸汽機改變了世界和人類的生活。第二次工業革命,電力改變了人類的生活方式;緊接著網際網路和通訊改變了人類的生活方式,正如吳恩達所說的,人工智慧也將徹底改變人們的生活方式。
誰曾想到,2012年隨著Hinton大師把深度學習應用到了一年一度的ImageNet影象識別競賽中的並顯著提高了影象識別的精度以來,目前為止,通過人工智慧演算法中的深度學習演算法,其影象識別率已經超過96%,而且還超過了人類。
這個看似遙不可及的東西,正在悄悄的改變一些人職業命運並有提前終止了一些以前認為是鐵飯碗的職業,比如,富士康正在把一些工廠遷移到美國,因為流水組裝線上的很多重複性勞動都能被機器人自動代替,又比如,自動駕駛技術流行和普及以後,路上的交通事故就會顯著的減少,保險公司的車險收入也會顯著減少,司機也許就會失業;如果人工智慧用於廣泛應用於癌症的早期診斷和治療的話,可能就不會出現很多嘆息和可惜,很多醫生就會失業;如果大家看過微軟的最新的應用深度學習實現的同步翻譯的話,就會被其技術深深的震撼,其不但能同步中英文翻譯,而且還能模仿被翻譯人的語音語調。但是大家不要害怕,我們應該擁抱這份變化,因為還有很多的事情,是人工智慧替代不了,因為人工智慧只能在特定的領域才能進行自我的學習,但是如果是跨知識領域或者涉及到人的一些情感藝術以及創造性方面,人工智慧暫時還是無法代替人類的。
人工智慧 VS 機器學習 VS 深度學習
我們今天經常有聽別的同事或者朋友或者公眾號提起,人工智慧,機器學習,深度學習,那麼他們之間到底是什麼樣的關係呢?
其實機器學習是人工智慧的一種實現方法,而且在許多的應用領域應用的非常成功,所以現在比較流行; 說到機器學習,就不得不提深度學習,深度學習是機器學習中的一個組成分支,深度學習是機器學習研究中的一個新的領域,其動機在於建立、模擬人腦進行分析學習的神經網路,它模仿人腦的機制來解釋資料,例如影象,聲音和文字。其關係如下:
傳統機器學習的經典演算法
機器學習分為無監督學習和有監督學習。簡單的說,有監督學習,就是不但提供給訓練演算法的訓練資料,而且還告訴其每個訓練資料對應的結果或者說標籤。讓訓練有對比,就好比考試中的選擇題,有標準答案一樣;而無監督學習就是有訓練樣本,但是每個訓練樣本不提供對應的標籤。靠訓練演算法自己來進行學習和分類。有點自學成才的味道。那傳統的機器學習裡面有哪些主要的經典演算法呢?請參考下面的圖片。
機器學習和深度學習的本質是什麼?
機器學習和深度學習的本質是什麼呢? 其實就是給定一個輸入(比如一張圖片),找到一個函式,從而得到一個精確或者準備的結果(識別影象,原來是一隻貓)。所以學好數學,包括線性代數,微積分,概率論,是基礎。因為我們需要找到一個最佳的模型,也就是函式,從而根據使用者提供的問題,我們能夠告訴使用者想要的答案。
神經網路 與 深度學習
提到深度學習,就不得不提神經網路,神經網路是深度學習的基礎.那什麼是神經網路呢?神經網路其實就模仿生物學的中的神經網路,生物學家在研究人類的大腦的時候發現,人的大腦中的神經系統有一個個神經元組成(觸突),神經元之間是有選擇的進行記憶和遺忘;借鑑這個發現,我們用一套簡單的模型模擬了神經網路,也就是人工神經網路(英文:artificial neural network,縮寫ANN)入下圖示意:
對於神經網路,我們需要知道下面幾個基本概念:
- 輸入層(Input layer),眾多神經元(Neuron)接受大量非線形輸入訊息。輸入的訊息稱為輸入向量。
- 輸出層(Output layer),訊息在神經元連結中傳輸、分析、權衡,形成輸出結果。輸出的訊息稱為輸出向量。
- 隱藏層(Hidden layer),簡稱“隱層”,是輸入層和輸出層之間眾多神經元和連結組成的各個層面。隱層可以有多層,習慣上會用一層。隱層的節點(神經元)數目不定,但數目越多神經網路的非線性越顯著,從而神經網路的強健性(robustness)(控制系統在一定結構、大小等的引數攝動下,維持某些效能的特性。)更顯著。習慣上會選輸入節點1.2至1.5倍的節點。
典型的神經網路具有以下三個部分:
- 結構 (Architecture) 結構指定了網路中的變數和它們的拓撲關係。例如,神經網路中的變數可以是神經元連線的權重(weights)和神經元的激勵值(activities of the neurons)。
- 激勵函式(Activity Rule) 大部分神經網路模型具有一個短時間尺度的動力學規則,來定義神經元如何根據其他神經元的活動來改變自己的激勵值。一般激勵函式依賴於網路中的權重(即該網路的引數)。
- 學習規則(Learning Rule)學習規則指定了網路中的權重如何隨著時間推進而調整。這一般被看做是一種長時間尺度的動力學規則。一般情況下,學習規則依賴於神經元的激勵值。它也可能依賴於監督者提供的目標值和當前權重的值。
其數學模型,可以用下面的公式表示,
深度學習就是利用人工神經網路的模型,通過提供的訓練資料(結果資料,可選),找出一個最佳的權值,從而找出一個最佳的函式,對於任意的輸入,都有近似乎的期望結果;這個就是深度學習模型的本質。
那為什麼叫深度學習呢?其實深度學習就是相對人工神經網路的層數而言的,隱含層越多,其深度越深(Deep),雖然其訓練的時間成本以及對計算效能的要求越高,但是其精度越高。如下圖,所示意,一種方式是不增加其層數,
但是大量增加每層的節點數(Fat +Short),另外一種方式(深度學習),主要增加其層數,但是適度選擇其每層的神經元的個數(Thin +Tall);通過實驗結果分析,增加層數的精度和效果遠遠好於增加其每層的神經元的個數;
加上現代的計算機和網路並行能力大大提高,所以深度學習的模型成為了不二的選擇。根據最新的研究,蘋果為了能夠產生大批量圖片資料來訓練神經網路,已經使用了人工合成的技術來以假亂真,生成訓練影象。果然人類的智慧真是無窮的啊!!!
人工智慧三大從業領域
說到人工智慧,就不得不提人工智慧的三大法寶: 大資料,計算能力和演算法。 因為我們知道,人工智慧其實是通過不斷的吃資料,自動的處理資料變聰明的,而且資料訓練的越多,其準備度越高。無論是個人企業都逃離不了上面的三大區域。 隨著工業的現代化,人類的分工也越來越密切,一個人試圖掌握一切知識的能力所付出的成本也越來越高。如果你覺得你對資料的處理比較在行的話,就可以在大資料的獲取和分類方面鑽研的更深,其實也是投入了人工智慧行業的懷抱的;如果你或者貴公司是做硬體裝置的,或者有大型分散式處理的設計和使用經驗的話,在人工智慧的計算方面進行拓展也是非常不錯的;如果你覺得你的演算法和數學功底很好的話,那麼可以在演算法方面進行深入的造詣。同時,肯定還有一部分人需要結合上面的三大法寶進行應用開發和引數調優,實際應用AI去解決生產生活的一些問題,這也是一個不錯的轉型的方向。
深度學習的開源框架推薦
深度學習有很多的開源框架,有TenseFlow, Theano,微軟的CNTK等等。但是筆者首推Keras,特別是對於入門的使用者來說,為什麼呢?因為學習曲線低,容易學習,容易上手,而且易於擴充套件,是快速實現原型的開源的基於Python的深度學習的好框架。
人工智慧的開發語言推薦
對於人工智慧以及大資料,當前最流行的應該是Python語言,因為Python語言是面向物件的,而且其原生的血統裡面就是用來進行科學計算的,而人工智慧的學習和應用過程中往往有牽涉到了大量複雜的數學公式和模型,所以首選語言選Python是不錯的,而且Python當前也有很多的開源框架和大公司在背後的支撐和使用,可以幫助使用者快速建立模型;另外Python也是一種膠水語言,如果感覺某部分演算法的效能比較慢的話,可以十分的方便用C或者C++語言替換。
另外,如果是從事資料分析領域,R語言也是一種非常不錯可以用於人工智慧領域的語言,R是用於統計分析、繪圖的語言和操作環境。R是屬於GNU系統的一個自由、免費、原始碼開放的軟體,它是一個用於統計計算和統計製圖的優秀工具。
如果大家在研究生或者博士階段對Matlab比較熟悉的話,其實也可以用Matlab來進行建模。 所以,如果大家上面三門一門都沒有掌握的話,建議選用Python,如果已經有R語言的基礎或者Matblab的基礎的話,如果用R語言或者MatLab也是一個不錯的選擇。
一點學習心得分享
作為程式設計師的我們,作為聰明程式設計師的我們,作為容易接受和學習新鮮技術的程式設計師的我們,作為站在時代資訊前鋒的程式設計師的我們,還等什麼?即使不轉行,也要學習和了解一下未來可能會顛覆世界的人工智慧技術。
我們也許在我們以前猶豫的時候錯過了寶貴的移動網際網路的成長或者創業機會,也許因為猶豫我們錯過了大資料帶來的成長或者創業機會,也許由於猶豫我們錯過了雲浪潮和物聯網帶來的成長或者創業機會,現在人工智慧,就近在咫尺,想抓住嗎?能抓住嗎? 光有一顆慾望的心是遠遠不夠的。還需要一些策略和思維:
首先第一步我感覺是要去感知和學習什麼是人工智慧,深度學習等。只有自己入門了之後,才能知道自己是否真的適合並喜歡這個行業,然後再決定自己是否繼續深入下去,還是作為一個吃瓜的群眾,瞭解一下即可。下面是筆者在最近2個月總結的關於深度學習和Keras框架學習的經驗,僅供入門參考,不喜勿噴!!!
@ 因為深度學習這門課,需要有一定的數學功底,但是一上來就讓大家學習積分,線性代數,概率統計,最優化方法有點讓人望而生畏。所以筆者建議,大家可以先到網上找一些簡單的視訊來看看,比如莫煩的Keras,每個視訊講的很短。而且還有視訊和程式碼,大家可以過一遍,並安裝視訊把程式碼敲一遍,哪怕不理解。如果英語好的,可以看斯坦福的人工智慧或者深度學習的視訊。
@ 在看視訊的時候,必須找到一個深度學習的開發框架自己倒騰倒騰,筆者感覺Keras是一個不錯的選擇,為什麼呢?簡單。 而且執行Keras的時候,最好在非window機器上安裝,比如Ubuntu或者Mac等。否則一旦安裝不順利,則會讓人感到很沮喪。
@ 這個時候,可以學學Python。不一定要學的很精通,但是需要知道其中的一些基本用法和概念,比如,陣列,元組的處理,方法的呼叫,類的例項化,而且特別注意Python的語法是非常強大和靈活的,其可以一次性返回多個不同的值。
@學些了Python之後,把高等代數中的微積分,線性代數或者概率論中的一些基本概率瞭解一下。
@ 如果英文好的話,看一下下面這本入門的書籍,如果英文不好,找它的中文翻譯版本。
http://neuralnetworksanddeeplearning.com/
@看了之後,在看臺灣大學李巨集毅老師的PPT,PPT做的非常的好。其中反向傳播這個章節還有視訊講解。
@等把上面的PPT看完之後,在回過頭來看看莫煩的Keras視訊並把其提供的例子嘗試執行一遍。
最後,
祝所有看到這篇文章的朋友們瞭解人工智慧成功!!!!!!!!
祝所有強烈意願轉型的程式設計師朋友們轉型成功 !!!!!!! !
參考資料
https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/2-2-CNN/
http://neuralnetworksanddeeplearning.com/
https://keras.io/
https://cs.stanford.edu/people/karpathy/convnetjs/demo/mnist.html
http://speech.ee.ntu.edu.tw/~tlkagk/courses.html
https://zh.wikipedia.org/wiki/%E4%BA%BA%E5%B7%A5%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C#.E4.BA.BA.E5.B7.A5.E7.A5.9E.E7.BB.8F.E5.85.83.E7.BD.91.E7.BB.9C.E6.A8.A1.E5.9E.8B