[TOC]
# 第一章 深度學習介紹
## 人工智能
人工智能的概念很寬泛,現在根據人工智能的實力將它分為三大類。
(1) 弱人工智能(Artificial Narrow Intellignece,ANI)
弱人工智能是擅長于單個方面的人工智能。比如戰勝世界圍棋冠軍的人工智能 Al-phaGo,它只會下圍棋,如果你讓他辨識以下貓和狗,它就不知道怎么做了。我們現在實現的幾乎全是弱人工智能。
(2) 強人工智能(Artificial General Intelligence,AGI)
這是類似人類級別的人工智能。強人工智能是指在各方面都能喝人類比肩的人工智能。
(3) 超人工智能(Artificial Superintelligence,ASI)
牛津哲學家、知名人工智能思想家 Nick Bostrom 把超級智能定義為 “在幾乎所有領域都比最聰明的人類大腦都聰明得多,包括科學創新、通識和社交技能”。
## 數據挖掘、機器學習與深度學習
**數據挖掘**
簡單來說,數據挖掘就是在大型的數據庫中發現有用的信息,并加以分析的過程,也就是人們所說的 KDD(knowledge discovery in database)。一個數據的處理過程,就是從輸入數據開始,對數據進行預處理,包括特征選擇、規范化、降低維數、數據提升等,然后進行數據的分析和挖掘,再經過處理,例如模式識別、可視化等,最后形成可用信息的全過程。
所以說數據挖掘只是一種概念,即從數據中挖掘到有意義的信息,從大量的數據中尋找數據之間的特性。
**機器學習**
機器學習算是實現人工智能的一種途徑,它與數據挖掘類似,是一門多領域交叉學科,設計概率論、統計學、逼近論、計算復雜性理論等多門學科。相比于數據挖掘從大數據之間找相互特性而言,機器學習更注重算法的設計,讓計算機能夠自動地從數據中 “學習” 規律,并利用規律對未知數據進行預測。
機器學習可以分為以下五個大類:
(1) 監督學習:從給定的訓練數據集中學習出一個函數,當新的數據到來時,可以根據這個函數預測結果。監督學習的訓練集要求是輸入和輸出,也可以說是特征和目標。訓練集中的目標是由人標注的。常見的監督學習算法包括回歸與分類。
(2) 無監督學習:無監督學習與監督學習相比,訓練集沒有人為標注的結果。常見的無監督學習算法有聚類等。
(3) 半監督學習:這是一種介于監督學習與無監督學習之間的方法。
(4) 遷移學習:將已經訓練好的模型參數遷移到新的模型來幫助新模型訓練數據集。
(5) 增強學習:通過觀察周圍環境來學習。每個動作都會對環境有影響,學習對象根據觀察到的周圍環境的反饋來判斷。
<br/>
傳統的機器學習算法有以下幾種:線性回歸模型、logistic 回歸模型、k-臨近算法、決策樹、隨機森林、支持向量機、人工神經網絡、EM 算法、概率圖模型等。
**深度學習**
深度學習的最初級版本是人工神經網絡,這是機器學習的一個分支,其視圖模擬人腦,通過更加復雜的結構自動提取數據特征。
推薦閱讀:[深度學習的歷史](https://www.jianshu.com/p/efda7876fe1c)
<br />
深度學習的結構
隨著神經網絡的發展,目前比較流行的網絡結構分別有:深度神經網絡(DNN)、卷積神經網絡(CNN)、循環遞歸神經網絡(RNN)、生成對抗網絡(GAN)等。
# 第二章 深度學習框架
框架的出現是為了減少重復的代碼,提高工作效率,下面介紹下目前流行的幾個深度學習框架。
## Tensorflow
Google 開源的 TensorFlow,是一款使用 C++ 語言開發的開源數學計算軟件,使用數據流圖(Data Flow Graph)的形式進行計算。圖中的節點代表數學運算、線條表示多維數據數組(tensor)之間的交互。
目前 TensorFlow 是全世界使用人數最多、社區最為龐大的一個框架,因為 Google 公司出品,其更新與維護也較為頻繁,并且有著 Python 和 C++ 接口,教程也非常完善,可以說是深度學習界框架默認的老大。
其缺點在于語言過于底層,目前有很多基于 Tensorflow 的第三方抽象庫將 Tensorflow 的函數進行封裝,使其變得簡潔,比較有名的有 Keras,Tflearn,tfslim,TensorLayer。
## Caffe
Caffe 全稱是 Convolutional Architecture for Fast Feature Embedding,其對于卷積網絡的支持特別好,是用 C++ 寫的,沒有提供 Python 接口,只提供了 C++ 接口。
Caffe 之所以流行,是因為之前很多 ImageNet 比賽里面使用的網絡都是用 Caffe 寫的,所以如果您想使用這些比賽里面的網絡模型就只能使用 Caffe,這也就導致了很多人直接轉到 Caffe 這個框架下。
其缺點是不夠靈活,同時內存占用高,只提供了 C++ 接口。
## Torch
Torch 是一個有大量機器學習算法支持的科學計算框架。Torch 的特點在于特別靈活,但是另外一個特殊之處是其采用 Lua 作為編程語言,這就增加了學習使用 Torch 的成本。PyTorch 的前身就是 Torch,PyTorch 的低層和 Torch 框架一樣,但是使用 Python 重寫了很多內容,不僅更加靈活,支持動態圖,也提供了 Python 接口。
## 為何使用 PyTorch
# 第三章 多層全連接神經網絡
## PyTorch 基礎
### Tensor(張量)
PyTorch 里面處理的最基本的操作對象就是 Tensor,Tensor 是張量的英文,表示一個多維的矩陣,比如零維就是一個點,一維就是向量,二維就是一般的矩陣,多維就相當于一個多維的數組,這和 numpy 是對應的,而且 PyTorch 的 Tensor 可以和 numpy 的 ndarray 相互轉換,唯一不同的是 PyTorch 可以在 GPU 上運行,而 numpy 的 ndarray 只能在 CPU 上運行。
常用的不同數據類型的 Tensor 如下:
- torch.FloatTensor 32位浮點型
- torch.DoubleTensor 64位浮點型
- torch.ShortTensor 16位整型
- torch.IntTensor 32位整型
- torch.LongTensor 64位整型