計算機很擅長存放,整理,獲取和處理大量數據。很合適有上百萬商品的電商網站,或是存幾十億條健康記錄,方便查看。算法
但若是想根據數據作決定呢?
這是機器學習的本質(根據數據作決定)。機器學習算法讓計算機能夠從數據中學習,而後自行做出預測和決定。
能自我學習的程序頗有用,好比判斷是否是垃圾郵件。人是否有心律失常嗎?下一個視頻該推薦哪一個?等等。雖然有用,但不會說它有人類通常的智能。雖然AI和ML這兩詞常常混着用,大多數計算機科學家會說,機器學習是爲了實現人工智能這個更宏大目標的技術之一,人工智能簡稱AI。數據庫
機器學習和人工智能算法通常都很複雜,說一說概念。編程
分類器
例如:判斷飛蛾是「月娥」仍是「帝娥」,這叫「分類」。
作分類的算法叫「分類器」,雖然用照片和聲音來訓練算法,不少算法會減小複雜性,把數據簡化成「特徵」,「特徵」是用來幫助「分類」的值。網絡
標記數據和決策邊界
對於飛蛾分類的例子,用兩個特徵:「翼展」和「重量」,爲了訓練「分類器」做出好的預測,須要「訓練數據」,爲了獲得數據,須要收集相應相關合適量的數據。收集過程當中,須要記錄數據,而且不僅記錄特徵值,還會把種類記錄上,這叫「標記數據」,由於只有兩個特徵,很容易用散點圖把數據視覺化。可以大體分紅倆組,但仍是會有必定的重疊,須要機器學習算法,找出最佳區分,經過數值估量,翼展小於45毫米的,極可能是帝娥,再加上一個條件,重量必須小於0.75,纔算是帝娥。這些叫作「決策邊界」。併發
混淆矩陣
必定數量的帝娥在正確的區域,但剩下的幾隻,在錯誤的區域,另外一方面,必定數量的月娥在正確的區域,剩下的在錯誤的區域。這個表,記錄正確數和錯誤數,這表叫「混淆矩陣」。app
--------------------------- | 正確區域帝娥 | 錯誤區域帝娥 | |-------------------------| | 錯誤區域月娥 | 正確區域月娥 | ---------------------------
機器學習算法的目的,是最大化正確分類 + 最小化錯誤分類。機器學習
未標籤數據
用決策邊界,若是是一隻不認識的飛蛾,能夠測量它的特徵,並繪製到決策空間上,這叫「未標籤數據」。
決策邊界能夠猜想飛蛾的種類。編程語言
決策樹
這個把決策空間,切成幾個盒子的簡單方法,能夠用「決策樹」來表示。函數
圖像與if語句:學習
生成決策樹的機器學習算法,須要選擇用什麼特徵來分類,每一個特徵用什麼值。
有時候一些算法甚至用多個「決策樹」來預測,計算機科學家叫這個「森林」,由於有多棵樹。
支持向量機
本質上使用任意線來切分「決策空間」,不必定是直線,能夠是多項式或其餘數學函數。機器學習算法負責,找出最好的線,最準確的決策邊界。
只有兩個特徵比較好實現,但若是加第三個特徵,好比「觸角長度」,那麼2D線段,會變成3D平面。在三個惟獨上作決策邊界,這些平面沒必要是直的,並且 真正有用的分類器會有不少飛蛾種類。
三個特徵和五個品種,能夠用3D散點圖 實現:
若是是一次性有4個或更多個特徵,就容易實現,沒有好的方法,更別說成百上千的特徵了。這正是機器學習面臨的問題。
經過想象在一個上千緯度的決策空間裏,給超平面找出一個方程。是不可行的,但機器學習算法能夠作到。
人工神經網絡
「決策樹」和「支持向量機」這些都出至於統計學,統計學早在計算機出現前,就在用數據作決定,有一大類機器學習算法用了統計學,也有不使用統計學的。其中值得注意的是 人工神經網絡,靈感來自大腦裏的神經元。神經元是細胞,用電信號和化學信號,來處理和傳輸消息,它從其餘細胞獲得一個或多個輸入,而後處理信號併發出信號,造成巨大的互聯網絡,能處理複雜的信息。
人造神經元很相似,能夠接受多個輸入,而後整合併發出一個信號,它不用電信號或化學信號。而是吃數字進去,吐數字出來,它們被放成一層層,造成神經元網絡,所以得名神經網絡。
飛蛾例子,看如何用神經網絡分類:
抽取一個「隱藏層」裏第一個神經元,神經元作的第一件事是把每一個輸入乘以一個權重。
假設2.8是第一個輸入,0.1是第二個輸入。而後它會相加輸入,總共是9.74。0.55 * 2.8 = 1.54
, 82 * 0.1 = 8.2
, 1.54 + 8.2 = 9.74
。
而後對這個結果,用一個誤差值處理,意思是加或減一個固定值。好比-6
, 9.74 - 6 = 3.74
。
作神經網絡時,這些誤差和權重,一開始會設置成隨機值,而後算法會調整這些值,來訓練神經網絡,使用「標記數據」來訓練和測試。逐漸提升準確性,很像人類學習的過程。
最後,神經元有激活函數,它也叫傳遞函數。會應用於輸出,對結果執行最後一次數學修改。例如,把值限制在-1
和+1
之間。或把負數改爲0,用線性傳遞函數,它不會改變值,因此,3.74
仍是3.74
。
因此,該最小神經元,輸入0.55和82,輸出3.74。但加權,求和,偏置,激活函數,會應用於一層裏的每一個神經元,並向前傳播,一次一層。數字最高的結果就是:月娥。(根據輸入的不一樣數值,使用不一樣算法,最後弄成一類可比較的數字經行輸出,根據輸出的不一樣經行分類)。
隱藏層不是隻能有一層,能夠有不少層。「深度學習」所以得名。
訓練更復雜的網絡,須要更多的計算量和數據,儘管神經網絡50多年前就發明了,深層神經網絡直到最近才成爲可能。須要強大的處理器和超快的GPU,對於幀率的要求。
弱AI,窄AI
展現了深度神經網絡,在照片中識別人臉的準確率,和人同樣高。有了深層神經網絡開車,翻譯,診斷醫療情況等等。這些算法很是複雜,但還不夠「聰明」,它們只能作一件事情,分類飛蛾,找人臉,翻譯。這種AI叫「弱AI」或「窄AI」,只能作特定任務。
能自動做出診斷的醫療設備和自動駕駛的汽車。
強AI
真正通用的,像人同樣聰明的AI,叫「強AI」。目前沒有人作出來,接近人類智能的AI,有些人認爲不可能作出來,但許多人說,數字化知識的爆炸性增加,好比,維基百科,網頁,視頻,是「強AI」的完美引燃物。
AI不只能夠吸取大量信息,也能夠不斷學習進步,並且通常比人類快得多,學習什麼管用,什麼無論用,本身發現成功的策略。這叫「強化學習」,是一種很強大的方法。和人類的學習方式很是相似。計算機如今纔剛學會反覆試錯來學習,對於不少狹窄的問題,強化學習已被普遍使用。
視覺的重要性
大部分人靠視覺來工做,越過障礙,讀路牌,看視頻,以及無數其它任務。
視覺是信息最多的感官,好比周圍的世界是怎樣的,如何和世界交互。
所以,一直以來,計算機科學家一直在想辦法讓計算機有視覺,所以有了「計算機視覺」這個領域。
目標是:讓計算機理解圖像和視頻。
「聽到」不等於「聽懂」;
「看到」不等於「看懂」。
圖像是像素網格,每一個像素的顏色,經過三種基色定義:紅,綠,藍。
經過組合三種顏色的強度,能夠獲得任何顏色,也叫RGB值。
最簡單計算機視覺算法,是跟蹤一個顏色物體,好比一個粉色的球。
不僅是一張圖片,能夠在視頻的每一幀圖片中跑這個算法,跟蹤球的位置。
固然,由於光線,陰影和其它影響。球的顏色會有所變化,不會存在和RGB值徹底同樣,但會很接近。
若是狀況更極端一些,好比比賽是晚上,追蹤效果可能會不好。若是球衣的顏色和球同樣,算法就徹底暈了。
所以不多用這類顏色跟蹤算法,除非環境能夠嚴格控制,顏色跟蹤算法是一個個像素搜索,由於顏色是在一個像素裏。
但這種方法,不適合多個像素的特徵,好比物體的邊緣,是多個像素組成的,爲了識別這些特徵,算法要一塊塊像素來處理,每一塊都叫作「塊」。
垂直邊緣算法
找垂直邊緣的算法,假設用來幫無人機躲避障礙,爲了簡單,須要把圖像轉成灰度,不過大部分算法能夠處理顏色
放大其中一個杆子,看看邊緣是怎樣的:
很容易地看到 杆子地左側邊緣從哪裏開始,由於有垂直地顏色變化,能夠定一個規則說,某像素是垂直邊緣的可能性,取決於左右兩邊像素的顏色差別程度。
左右像素的區別越大,這個像素越多是邊緣。若是色差很小,就不是邊緣。
核
這個操做的數學符號,看起來像這樣:
這個叫作「核」或「過濾器」
找垂直邊緣的算法,假設用來幫無人機躲避障礙,爲了簡單,須要把圖像轉成灰度,不過大部分算法能夠處理顏色
裏面的數字用來作像素乘法,總和,存到中心像素裏。
例如,
把全部像素已經轉成灰度值,把「核」的中心,對準感興趣的像素:
這指定了每一個像素要乘的值,而後把全部數字加起來,在這裏,最後的結果是147
成爲新的像素值,把「核」應用於像素塊,這種操做叫「卷積」。
卷積
結果值,色差很小,不是邊緣。
若是把「核」用於照片中每一個像素,結果,會成爲這樣:
垂直邊緣的像素值很高,注意,水平邊緣,幾乎看不見。若是要突出那些特徵,要用不一樣的「核」,用於水平邊緣敏感的「核」。
這兩個邊緣加強的核叫「Prewitt算子」,以發明者命名,衆多「核」的兩個例子,「核」能做出不少種圖像轉換。
例如,銳化的「核」:
模糊圖像的「核」:
「核」也能夠像餅乾模具同樣,匹配特定形狀,以前作檢測邊緣的「核」,會檢查左右或上下的差別,但也能夠做出擅長找線段的「核」。
或者包了一圈對比色的區域,這類「核」能夠描述簡單的形狀,
好比鼻樑每每比鼻子兩側更亮,因此線段敏感的「核」對這裏的值更高。
眼睛也很獨特,一個黑色圓圈被外層更亮的一層像素包着,有其它「核」對這種模式敏感。
卷積神經網絡
當計算機掃描圖像時,最多見的是用一個窗口來掃,能夠找出人臉的特徵組合。
當計算機掃描圖像時,最多見的是用一個窗口來掃,能夠找出人臉的特徵組合。
雖然每一個「核」單獨找出臉的能力很弱,但組合在一塊兒會至關準確,不是臉但又有一堆臉的特徵在正確的位置,這種狀況不太可能。
這種檢測算法叫:人臉檢測算法。
熱門算法是:卷積神經網絡。
神經網絡是最基本單元,是神經元,它有多個輸入,而後會把每一個輸入,乘一個權重值,而後求總和。
「核」也能夠像餅乾模具同樣,匹配特定形狀,以前作檢測邊緣的「核」,會檢查左右或上下的差別,但也能夠做出擅長找線段的「核」。
或者包了一圈對比色的區域,這類「核」能夠描述簡單的形狀,
好比鼻樑每每比鼻子兩側更亮,因此線段敏感的「核」對這裏的值更高。
眼睛也很獨特,一個黑色圓圈被外層更亮的一層像素包着,有其它「核」對這種模式敏感。
若是給神經元輸入二維像素,徹底就像「卷積」,輸入權重等於「核」的值,但和預約義「核」不一樣,神經網絡能夠學習對本身有用的「核」,來識別圖像中的特徵。
「卷積神經網絡」用一堆神經元處理圖像數據,每一個都會輸出一個新圖像,本質上是被不一樣「核」處理了,輸出會被後面一層神經元處理,卷積卷積再卷積。
第一層可能會發現「邊緣」這樣的特徵,單次卷積能夠識別出這樣的東西,下一層能夠再這些基礎上識別,好比由「邊緣」組成的角落,
而後下一層能夠在「角落」上繼續卷積,下一層可能識別簡單物體的神經元,好比,嘴和眉毛。而後不斷重複,逐漸增長複雜度,
直到某一層把全部的特徵都放在一塊兒:眼睛,耳朵,嘴巴,鼻子。
「卷積神經網絡」不是非要不少不少層,但通常會有不少層,來識別複雜的物體和場景,因此算是「深度學習」了。
還能夠識別手寫文字,在CT掃描中發現腫瘤,監測馬路是否擁堵。
無論用什麼算法,識別出臉以後,能夠用更專用的計算機視覺算法,來定位面部標誌,好比鼻尖和嘴角。有了標誌點,判斷眼睛有沒有張開就很容易了,只是點之間的距離罷了,
也能夠跟蹤眉毛的位置,眉毛相對眼睛的位置,能夠表明驚喜或喜悅,根據嘴巴的標誌點,檢測出微笑也很簡單。
這些信息能夠用「情感識別算法」來識別,讓電腦知道你是開心,憂傷,沮喪,困惑等等。而後計算機能夠做出合適的行爲。
好比當你不明白的時候,給你提示,心情很差的時候,就不彈更新提示了。不僅是物理環境。
面部標記點,也能夠捕捉臉的形狀,好比兩隻眼睛之間的距離,以及前額有多高,作生物識別,讓有攝像頭的計算機能認出你,
無論是手機解鎖,仍是政府用攝像頭跟蹤人,人臉識別有無限應用場景。
跟蹤手臂和全身的標記點,也有突破,讓計算機理解用戶的身體語言。
抽象是構建複雜系統的關鍵。
計算機視覺也同樣,硬件層面,有工程師在造更好的攝像頭,讓計算機有愈來愈好的視力。
用來自攝像頭的數據,能夠用視覺算法找出臉和手,而後能夠用其它算法,接着處理,解釋圖片中的東西。好比用戶的表情和手勢。
計算機視覺的應用:
視覺能力達到人類水平的計算機會完全改變交互方式。
計算機視覺 - 讓電腦能看到並理解。
計算機如何理解天然語言?
編程語言,詞彙量少,並且很是結構化,代碼只能在拼寫和語法徹底正確時,編譯運行。
天然語言有大量詞彙,有些詞有多種含義,不一樣口音,以及各類有趣的文字遊戲。
人類有強大的語言能力,所以,讓計算機擁有語音對話的能力,這個想法從構思計算機的時候,就已經誕生了。
所以有「天然語言處理」,簡稱「NLP」。
結合了計算機科學和語言學的 一個跨學科領域。
單詞組成句子的方式有無限種,無法給計算機一個字典,包含全部可能的句子,讓計算機理解人類在嘟嚷什麼。
因此NLP
早期的一個基本問題是 怎麼把句子切成一塊塊。
英語單詞有九種基本類型:
名詞,代詞,冠詞,動詞,形容詞,副詞,介詞,連詞和感嘆詞。
這些叫「詞性」。
還有各類子類,好比:
單詞名詞 vs 複數名詞
副詞最高級 vs 副詞比較級
分析樹
瞭解單詞類型有用,但不幸的是,不少詞有多重含義,有些還能夠做動詞或形容詞。僅靠字典,不能解決這種模糊問題。因此電腦也要知道語法。
所以開發了「短語結構規則」來表明語法規則。
例如,英語中有一條規則,句子能夠由名詞短語和一個動詞短語組成。
名詞短語能夠是冠詞,而後一個名詞,或一個形容詞後面跟一個名詞。
能夠給一門語言制定出一堆規則,用這些規則,能夠做出「分析樹」,它給每一個單詞標了多是什麼詞性,也標明瞭句子的結構。
語音識別
例如,
THE MONGOLS ROSE FROM THE LEAVES
它給每一個單詞標了多是什麼詞性,也標明句子的結構。
句子的名詞重點是the mongols
, 在作rising
行爲, 從leaves
rising。
數據塊更小,更容易處理。
每次的語音搜索,都有這樣的流程。
計算機能明白這是「哪裏」(where)的問題。
把語言像樂高同樣拆分,方便計算機處理,計算機能夠回答問題,以及處理命令。
若是句子複雜一點計算機就無法理解。
還有,「短語結構規則」和其餘語言結構轉化的方法,能夠用來生成句子。
數據存在語義信息網絡時,這種方法特別有效,實體互相鏈接在一塊兒,提供構造句子的全部成分。
Google稱之爲「知識圖譜」,在2016年,包含大概七百億個事實,以及不一樣實體間的關係。
處理,分析,生成文字,是聊天機器人的最基本部件。
聊天機器人就是能和你聊天的程序,早期的聊天機器人大多用的是規則。
把用戶可能會說的話,和機器人應該回復什麼,寫成上百個規則,顯然,這很難維護,並且對話不能太複雜。
聊天機器人和對話系統,在過去發展極快,現在能夠和真人很像。
現在大多數用機器學習,用上GB的真人聊天數據 來訓練機器人。
聽到一個句子,計算機怎麼從聲音中提取詞彙?
這個領域叫「語音識別」。
處理天然語言的新算法,再也不是手工定規則,而是用機器學習,從語言數據庫中學習。
現在準確度最高的語音識別系統,用深度神經網絡。
理解原理:
先看看元音,好比a
和e
這是兩個聲音的波形,這個信號來自麥克風內部隔膜震動的頻率,在這個視圖中,橫軸是時間,豎軸是隔膜移動的幅度,或者說振幅。
雖然能夠看到2個波形有區別,但不能看出那個表示e
或那個表示a
。
爲了更容易識別,換個方式看:譜圖。
這裏橫軸仍是時間,但豎軸不是振幅,而是不一樣頻率的振幅,顏色越亮,那個頻率的聲音就越大,這種波形到頻率的轉換,是用一種算法作的:快速傅立葉變換(FFT)。
若是盯過立體聲系統的EQ可視化器,差很少是一回事。
譜圖是隨時間變化的。
譜圖中,信號有種螺紋圖案,那是聲道回聲,爲了發出不一樣聲音,須要嘴巴和舌頭變成不一樣形狀,放大或減小不一樣的共振,能夠看到有些區域更亮,有些更暗。
若是從底向上看,標出高峯,叫「共振峯」:
全部的元音都是如此,這讓計算機能夠識別元音,而後識別出整個單詞。
例如:
當說「she... was.. happy」。
能夠看到e
聲,和a
聲,以及其它不一樣的聲音。
好比she
中的shh
聲,was
中的wah
和sss
等等。
這些構成單詞的聲音片斷,叫「音素」,語音識別軟件,知道這些音素,英語有大概44種音素,因此本質上變成了音素識別。
還要把不一樣的詞分開,弄清句子的開始和結束點,最後把語音轉成文字。
結合語言模型後,語音轉文字的準確度會大大提升,裏面有單詞順序的統計信息。
語音合成
讓計算機輸出語音,它很像語音識別,不過反過來,把一段文字,分解成多個聲音,而後播放這些聲音,早期語音合成技術,能夠清楚聽到音素是拼在一塊兒的。
到了1980年代,技術改進了不少,但音素混合依然很差,產生明顯的機器人聲音。創造一個正循環反饋,人們用語音交互的頻率會提升,給更多公司提供數據,來訓練語音系統。提升準確性,準確度高了,更願意使用語音交互。