TensorFlow系列專題(一):機器學習基礎

2020-12-11 人工智慧遇見磐創

一.人工智慧發展

二.人工智慧面臨的挑戰

三.機器學習簡介

四.解決機器學習問題的一般流程

(1)數據收集

(2)數據預處理

(3)特徵工程

(4)模型的選擇

(5)模型的評估

一.人工智慧發展

1956年的8月,美國達特茅斯學院(Dartmouth College)舉行了一次研討會,這次會議由約翰麥卡錫等人發起,會議上約翰麥卡錫首次提出了「人工智慧」這個概念,這次會議也被公認為是人工智慧誕生的標誌。在這六十多年的時間裡,人工智慧的發展起起伏伏、忽「冷」忽「熱」。而2016年AlphaGo與李世石的那場「世紀大戰」則徹底點燃了大眾的熱情。當前人工智慧成了一個「香餑餑」,很多國家都在積極爭奪人工智慧領域的話語權,各大公司也都不斷加大在人工智慧領域的投入。對於想要轉行人工智慧領域或者正在從事人工智慧領域的從業者來說,當前是一個不折不扣的黃金時代。

機器學習和深度學習作為解決人工智慧問題的工具,目前正被廣泛的學習和使用。本書以Google的深度學習框架TensorFlow為載體,希望幫助讀者快速的掌握這一深度學習的「利器」,同時讓讀者對深度學習的算法有一個初步的了解,並能夠利用這套工具和算法解決自己所面臨的深度學習的問題。

二.人工智慧面臨的挑戰

從Google推出無人駕駛汽車,到AlphaGo戰勝人類頂級圍棋高手李世石,再到阿里巴巴宣布成立人工智慧研究院——達摩院,最近幾年關於人工智慧的話題一直霸佔著各大媒體的頭條。隨著國務院於2017年7月8日印發《新一代人工智慧發展規劃》,人工智慧也已經上升到了國家發展的戰略高度。

什麼是人工智慧(Artificial Intelligence)?目前關於人工智慧還沒有一個統一和明確的定義,我們可以簡單地認為:人工智慧旨在研究如何讓計算機擁有(或部分擁有)人類的智力,從而去解決現實中只有依靠人的智力才能解決的問題。

目前,人工智慧的應用已經非常廣泛,涵蓋了金融、電商、醫療、製造業、教育等多個領域,諸如科大訊飛的語音識別、谷歌的翻譯系統、電子商城的推薦系統、美圖軟體的圖片處理功能以及今日頭條的個性化新聞推薦等,這些具體的應用場景和我們的生活息息相關。而在未來,人工智慧將會覆蓋到更多的領域,這不僅是一場科技的革命,更是時代的大勢所趨。人工智慧的浪潮必然會讓我們的生活發生翻天覆地的變化,也將全方位推動人類社會邁向更高的文明。

對於人工智慧的討論,有兩個極端的現象,一種是過分的誇大人工智慧的能力,另一種則是過於貶低人工智慧的潛在價值。人工智慧還處在一個「幼小」的年齡段,過分的吹噓人工智慧的能力,甚至於炒作所謂的「人工智慧威脅論」都不利於人工智慧的發展。雖然人工智慧並沒有那麼強,但是在很多的現實問題中,人工智慧的確已經可以做得很好了,所以我們也應該重視人工智慧未來的發展潛力。這一次浪潮過後,不知道人工智慧的發展又會面臨什麼樣的境地,作者撰寫本書的目的之一就是希望能讓更多的人快速的加入這個浪潮之中,能讓更多的項目可以落地。只有大家正視人工智慧,讓它保持一個健康的發展環境,才能依靠它創造出最大的價值。

三.機器學習簡介

機器學習(Machine Learning)是讓計算機能夠自動地從某些數據中總結出規律,並得出某種預測模型,進而利用該模型對未知數據進行預測的一種方法。它是一種實現人工智慧的方式,是一門綜合了統計學、概率論、逼近論、凸分析、計算複雜性理論等的交叉學科。

目前對於機器學習的研究和使用大概集中於下圖所示的一些領域:

圖一 機器學習的研究和應用領域

事實上,無論是模式識別問題還是數據挖掘問題,它們所涉及到的機器學習的問題在很多地方都是相通的,只是在方法和側重點上有所區別。模式識別是機器學習中通過數學方法來研究模式處理的一類問題;數據挖掘是從資料庫管理、數據分析、算法的角度探索機器學習問題;而統計學習則是站在統計學的視角來研究機器學習問題。

計算機視覺、語音識別以及自然語言處理(這裡特指文本處理)目前是機器學習領域最常見的幾類應用領域。計算機視覺是一門研究如何讓機器能夠替代人的眼睛,把看到的圖片進行分析、處理的一門科學。在圖像分類、人臉識別、車牌識別、自動駕駛中的街景識別等場景均有十分廣泛的應用。語音識別是把語音處理、語義理解等技術和機器學習結合起來。常見的應用有:siri、小冰等語音助手。此外,語音識別經常還會和自然語言處理技術中的機器翻譯、語音合成等技術構建出更加複雜的應用,如:語音翻譯器。自然語言處理旨在使用自然語言處理技術使計算機能夠「讀懂」人類的語言。具體的應用有:谷歌翻譯、垃圾郵件的識別、知識圖譜等。

目前,機器學習大致可以分為以下幾類:

(1)有監督學習(Supervised learning):我們已經知道一些數據和正確的輸出結果(訓練集),然後通過這些數據訓練出一個模型,再利用這個模型去預測新數據的輸出結果。監督學習可分為回歸問題和分類問題兩大類。回歸問題中,我們預測的結果是連續值;而分類問題中,我們預測的結果是離散值。常見的有監督學習算法有:線性回歸、邏輯回歸、K-近鄰、樸素貝葉斯、決策樹、隨機森林、支持向量機等。

(2)無監督學習(Unsupervised learning):無監督學習中沒有給定類標的訓練樣本,這就需要我們對給定的數據直接進行建模。和監督學習最大的不同在於無監督學習我們事先並不知道數據的類標。常見的無監督學習算法有:聚類、EM算法等。

(3)半監督學習(Semi-supervised learning)):給定的數據集中既包括有類標的數據,也包括沒有類標的數據。是一種介於有監督學習和無監督學習之間的方法,它在工作量(例如數據的打標)和模型的準確率之間取了一個平衡點。

(4)強化學習(Reinforcement learning):計算機從什麼都不懂,到通過不斷學習、總結規律,最終學會的過程便是強化學習。強化學習很依賴於學習的「周圍環境」,強調如何基於「周圍環境」而作出相應的動作。

圖二 機器學習算法的分類

四.解決機器學習問題的一般流程

當我們拿到一個機器學習問題時,解決問題的一般流程大致可以分為以下幾個步驟,如圖1-3所示:

圖三 解決機器學習問題的一般流程

(1)數據收集

業界有一句非常流行的話:「數據和特徵決定了機器學習的上界,而模型和算法只是去逼近這個上界」,由此可見,數據對於整個機器學習項目來說至關重要。當我們面臨一個實際的問題時,有時候只是有一個關於該問題的大致想法,以及一些相關的有用或無用的數據。數據收集就是要根據我們的需求從這些數據中找出我們真正需要的數據。還有一些時候,我們只是有一個想法,根本就沒有數據,這就需要我們自己去搜尋、整理數據。對於一個學習者或研究者來說,當我們有了一個相關的問題之後,一個較好的收集數據的方式是去網上找一些質量較高、使用較多的公開數據集。

(2)數據預處理

無論是我們自己的數據還是公開的數據集,通常都會存在各種各樣的問題,例如數據不完整、格式不一致、存在異常數據以及正負樣本數量不均衡等。因此,需要對數據進行一系列的處理之後才能拿來使用,這個過程稱為數據預處理。

(3)特徵工程

目前在機器學習或深度學習相關的書籍中,很少會有專門把特徵工程拿出來單獨介紹的(在一些數據分析或數據挖掘相關的書籍中可能會介紹的多一些)。的確,對於整個機器學習的項目來說,特徵工程只是裡面很小的一部分工作,但是千萬不能忽略這「一小部分」工作的重要性。一個機器學習任務的成功與否往往很大程度上取決於特徵工程。簡單來說,特徵工程的任務是從原始數據中抽出最具有代表性的特徵,從而讓模型能夠更有效地學習這些數據。通常我們可以使用sklearn這個庫來處理數據和提取特徵,sklearn是機器學習中使用非常廣泛的一個第三方模塊,它本身封裝了很多常用的機器學習算法,同時它還有很多數據處理和特徵提取相關的方法,詳細使用說明可以參閱sklearn的官方文檔:http://scikit-learn.org/stable/modules/preprocessing.html#preprocessing。

(4)模型的選擇

當我們處理好數據之後,就可以選擇合適的機器學習模型進行數據的訓練了。常見的機器學習模型我們在上一小節已經簡單介紹過,每種模型詳細的介紹和用法,同樣可以參閱sklearn官方手冊:http://scikit-learn.org。可以看到可供選擇的機器學習模型有很多,每個模型都有自己的適用場景,那麼如何選擇合適的模型呢?

我們需要先對處理好的數據進行分析,一般的,首先判斷數據是否有類標,若是有類標則應該考慮使用有監督學習的相關模型,否則可以劃分為無監督學習問題。其次分析問題的類型是屬於分類問題還是回歸問題,當我們確定好問題的類型之後再去選擇具體的模型。在模型的實際選擇時,通常會考慮使用多個不同的模型,或者相同的模型使用不同的參數對數據進行訓練,然後比較模型的效果,選擇最佳的那個,這需要用到接下來要介紹的模型評估的方法。此外,我們還會考慮到數據集的大小,若是數據集樣本較少,訓練的時間較短,通常考慮樸素貝葉斯等一些輕量級的算法,否則的話就要考慮SVM等一些重量級算法,甚至考慮使用深度學習的模型。

(5)模型的評估

在選擇和優化模型階段,我們都需要對模型進行評估。常用的評估方法有留出法、交叉驗證法以及自助法等,相關的評價指標有:

l 正確率和錯誤率

正確率(accuracy)和錯誤率(error rate)是最常用也是最簡單的模型評價指標。錯誤率是指在測試集(或驗證集)中分類錯誤的樣本數佔總測試集(或驗證集)樣本數的比例,正確率是指在測試集(或驗證集)中分類正確的樣本數佔總測試集(或驗證集)樣本數的比例,即:正確率=1-錯誤率。

l 查準率、查全率和F1-score

有些時候,我們並不僅僅關心錯誤率和精度,我們可能還想知道,在所有的正例樣本中有多少被正確分類,或者又有多少負例樣本被錯分為正例。這種情況下,我們就可以使用查準率(precision)、查全率(recall,又稱為「召回率」)和F1-score作為度量標準。

l ROC和AUC

ROC(Receiver Operating Characteristic)和AUC(Area Under Curve)是從一個更泛化的角度來評估模型的性能,ROC和AUC的計算依賴於查準率和查全率。目前,在作者平時的工作中以及從身邊同事和朋友的反饋來看,主要還是以查準率、查全率以及F1-score作為主要的模型性能評價指標。本書中將不會展開介紹ROC和AUC。

到這裡我們已經知道了解決機器學習問題的大致流程和相關方法,接下來的內容裡,我們會將其中兩個最重要的環節「特徵工程」和「模型的選擇與評估」單獨拿出來,做進一步的介紹。

相關焦點

  • TensorFlow發布JavaScript開發者的機器學習框架TensorFlow.js
    發布新的 TensorFlow 官方博客(http://blog.tensorflow.org/)與 TensorFlow YouTube 頻道;2. 面向 JavaScript 開發者的全新機器學習框架 TensorFlow.js;3.
  • tensorflow機器學習模型的跨平臺上線
    ,這個方法當然也適用於tensorflow生成的模型,但是由於tensorflow模型往往較大,使用無法優化的PMML文件大多數時候很笨拙,因此本文我們專門討論下tensorflow機器學習模型的跨平臺上線的方法。
  • 從TensorFlow.js入手了解機器學習
    在trainModel方法裡我們將定義層 (只需要使用一個,這對於線性回歸問題來說足夠了):import * as tf from '@tensorflow/tfjs';/*** Linear model class*/export default class LinearModel {  /**  * Train model  */  async trainModel
  • 6 種方法部署 TensorFlow2 機器學習模型,簡單 + 快速 + 跨平臺!
    不但個人如此,在實際工作中,一個優秀的程式設計師除了要學會構建機器學習模型,也更應該學會將其成功部署,向用戶提供便捷的服務。如下圖所示,機器學習系統由機器學習代只包含一小部分,而在中間的小黑匣子周圍,所需要的基礎設施龐大而複雜。
  • TensorFlow系列專題(十三): CNN最全原理剖析(續)
    是一個三維的張量(tensor),其中每個切片(slice)矩陣你也許還想看:● TensorFlow系列專題(十二): CNN最全原理剖析(多圖多公式)● TensorFlow系列專題(十一):RNN的應用及注意力模型● 十 | 門控循環神經網絡LSTM與GRU(附python演練)  ● TensorFlow系列專題(九):常用RNN網絡結構及依賴優化問題  ● TensorFlow系列專題(八):七步帶你實現RNN循環神經網絡小示例  ● TensorFlow系列專題(
  • 機器學習進階筆記| 利用TensorFlow實現智能數字識別
    引言《機器學習進階筆記》系列將深入解析TensorFlow系統的技術實踐,從零開始,由淺入深,與大家一起走上機器學習的進階之路。
  • 小叮噹機器學習:Python3.6配置TensorFlow的GPU版詳細安裝教程
    隨著機器學習,神經網絡的搭建,我們對海量數據的處理需求越來越大。雖然,CPU的發展速度已經放緩,但並行處理的架構卻取得了爆炸式的發展。圖形處理單元(GPU)的大量運用,已經拉開了機器學習迅猛發展的序幕。
  • TensorFlow 安裝詳解
    小結 一、機器學習機器學習,並不能理解成機器學習算法。機器學習,就是為了讓機器可以去模擬人類。在應用實踐上,可以狹義理解為機器學習算法,但聚焦在具體算法實現和編程上,往往實踐中不盡人意。機器學習是一種學科,一種類似數學的學科,交叉了數學、算法、計算機等多門學科。目的是讓機器(這裡指計算機)如何模擬或者實現人類的學習行為。
  • TensorFlow應用實戰 | TensorFlow基礎知識
    # -*- coding: UTF-8 -*-# 引入tensorflowimport tensorflow as tf# 設置了gpu加速提示信息太多了,設置日誌等級屏蔽一些import osos.environ['TF_CPP_MIN_LOG_LEVEL']='2'# 創建兩個常量 Tensor.第一個為
  • TensorFlow極速入門
    熱衷於深度學習技術的探索,對新事物有著強烈的好奇心。一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。
  • tensorflow極速入門
    一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。本教程不是 cookbook,所以不會將所有的東西都事無巨細的講到,所有的示例都將使用 python。那麼本篇教程會講到什麼?
  • 370頁《TensorFlow 機器學習方案手冊》(附 pdf 和完整代碼)
    一旦你熟悉 TensorFlow 的生態系統,最後一章將向您展示如何將其投入生產。《TensorFlow 機器學習方案手冊》共包含 11 章內容,基本覆蓋機器學習、神經網絡、CNN、RNN 的核心知識點。具體目錄如下:
  • Tensorflow 全網最全學習資料匯總之Tensorflow 的入門與安裝【2】
    更多關於TensorFlow的深入介紹、應用項目以及各機器學習開源框架之間的對比等內容,請見雷鋒網(公眾號:雷鋒網)的系列文章。《TensorFlow學習筆記1:入門》連結:http://www.jeyzhang.com/tensorflow-learning-notes.html本文與上一篇的行文思路基本一致,首先概括了TensorFlow的特性,然後介紹了graph、session、variable 等基本概念的含義,以具體代碼的形式針對每個概念給出了進一步的解釋
  • TensorFlow 實現流行的機器學習算法的教程匯集
    通過一個具體的機器學習任務學習 TFLearn 基礎。開發和訓練一個深度神經網絡分類器。github.com/tflearn/tflearn/blob/master/examples/notebooks/spiral.ipynb可延展的 TensorFlow層,與 TensorFlow 一起使用 TFLearn 層: https://github.com/tflearn/tflearn/blob/master/examples/extending_tensorflow
  • Python系列-人工智慧篇:帶你搞懂TensorFlow基礎入門
    官網地址:https://github.com/tensorflow/tensorflow什麼是數據流圖?數據流圖是描述有向圖中的數值計算過程。有向圖中的節點通常代表數學運算,但也可以表示數據的輸入、輸出和讀寫等操作;有向圖中的邊表示節點之間的某種聯繫,它負責傳輸多維數據(Tensors)。
  • TensorFlow 2.0 基礎:張量、自動求導與優化器
    求局部極小值,梯度下降的過程如下:初始化自變量為 機器學習模型的實現並不是 TensorFlow 的專利。事實上,對於簡單的模型,即使使用常規的科學計算庫或者工具也可以求解。在這裡,我們使用 NumPy 這一通用的科學計算庫來實現梯度下降方法。NumPy 提供了多維數組支持,可以表示向量、矩陣以及更高維的張量。同時,也提供了大量支持在多維數組上進行操作的函數(比如下面的np.dot()是求內積,np.sum()是求和)。
  • 玩轉TensorFlow?你需要知道這30功能
    網址:https://github.com/tensorflow/tensor2tensor可以將 8 鍵輸入映射到一架 88 鍵鋼琴上、自動創建旋律伴奏、使用機器學習來顯示音樂的視覺效果、轉錄曲調、產生新的聲音等等。網址:https://magenta.tensorflow.org/
  • 一文上手最新Tensorflow2.0系列|TensorFlow2.0安裝
    安裝TensorFlow我們可以直接使用「pip install tensorflow==2.0.0-alpha0」命令來進行安裝。由於作者使用的pip源還沒有加入「TensorFlow2.0.0-alpha0」版本,所以這裡我們直接到「PyPi」網站下載TensorFlow2.0 Alpha版的安裝包。
  • Anaconda軟體安裝TensorFlow教程
    Anaconda軟體的安裝,請閱讀文章《Anaconda軟體安裝和簡易使用教程》第一步:創建r-tensorflow環境打開Anaconda Prompt,執行命令conda create --name r-tensorflow python=3.6該命令用來創建r-tensorflow虛擬環境
  • 基於TensorFlow的深度學習實戰
    毫不誇張得說,TensorFlow的流行讓深度學習門檻變得越來越低,只要你有Python和機器學習基礎,入門和使用神經網絡模型變得非常簡單。TensorFlow簡介如前所述,TensorFlow是一個深度學習庫,使用這一框架,可以用來構建和測試深度神經網絡。深度學習讓我們能夠以極高的準確性構建複雜的應用程式。