---
# System prepended metadata

title: 人工智慧與深度學習

---

# 人工智慧(一) (Artificial Intelligence - 1) 
## 1.1 人工智慧與深度學習課程簡介

### 深度學習的突破來自於3點結合

* 硬體（例：GPU）
* 軟體（模擬學習平臺）
* 大數據（共享平臺：社交平臺、購物網站）

---
### 深度神經網路

* 接近**人腦複雜度**和功能
* 處理**多層次抽象化**（學習行爲）
* 建立感官信號與腦的**直接連接**

---
### 傳統機械學習的瓶頸

* 訊號無法直接使用 需轉化成符號 才能在模組間傳遞 -> **時間消耗大**
* 新的資料無法喚起舊的記憶（曾學過的東西）-> **無法纍積知識**
* **無法實現特徵偵測/截取** 必須由内存無中尋找類似結構體 -> 若沒有類似結構體就會出現卡殼
* 綜合以上三個問題 -> **無法因應現代社會多、快、雜、疑的數據**
---
### 深度神經網絡配合大數據

* 多——**數據很多** -> 模型擁有足夠學習能量
* 快——**時間不等人** -> 模型的學習過程不會卡頓
* 雜——資料來源來自四面八方 **無整理** -> 模型有足夠彈性
* 疑——資料**不一定正確** -> 模型有容錯空間
## 1.2 人工智慧與其他領域的交互

### 哲學

1. 我思故我在（by笛卡爾）：
    1-1 身心二元論：靈魂與肉體是兩個實體
    1-2 我在思考->證明我存在
2. 圖靈測試
    2-1 類似現在的查AI率
    2-2 測試機器是否能夠表現出與人等價或無法區分的智慧
    2-3 是否代表機器具有思維或意識
    https://zh.wikipedia.org/wiki/%E5%9B%BE%E7%81%B5%E6%B5%8B%E8%AF%95
3. 中文屋思考實驗
    3-1 能否創造出強人工智慧
    3-2 即便有一物體與心靈一樣强大 那物體也不一定是心靈
    https://zh.wikipedia.org/wiki/%E4%B8%AD%E6%96%87%E6%88%BF%E9%97%B4

---

### 心理認知神經科學
1. 赫布型學習（Hebbian Learning）
    1-1 神經元同時有反應則連接變强（cell that fire together, wire together) -> 神經元學習
    1-2 啓發神經網路發展
2. 深度學習處理過程
    2-1 與深度學習類似
    ![1.2.1](https://hackmd.io/_uploads/S1dz2-fQkl.png)
    此爲階層式學習

---
### 賽侷理論

研究個體與團體如何做決策
![1.2.2](https://hackmd.io/_uploads/HyRfaWzQkg.png)

*納許均衡(Nash equilibrium)
若某情況下無一參賽者可以透過獨自行動而增加收益 則此情況為納許均衡點

## 1.3 人工智慧的未來發展

### 影像、語音識別

![1.3.1](https://hackmd.io/_uploads/r1jNAZMmyl.png)

*  人工智慧在2015年首次在視覺分析上贏過人類

---

### 機器翻譯

https://research.google/blog/zero-shot-translation-with-googles-multilingual-neural-machine-translation-system/
![1.3.2](https://hackmd.io/_uploads/SyMHA-fQkx.png)

* 機器翻譯上的學習

---

### 自動駕駛

https://github.com/momonala/deeptesla
* 特斯拉 google 已將機器學習運用在駕駛上 就像人類學車一樣

---

### 通用人工智慧
* 整合**學習**、**推理**、**規劃**、**記憶**
* 面對任何問題都能處理

---

### 對社會衝擊

https://obamawhitehouse.archives.gov/blog/2016/12/20/artificial-intelligence-automation-and-economy
* 上述官方文章表示：大多數在未來工作都有可能會被人工智慧取代

# 人工智慧(二) (Artificial Intelligence - 2)
## 2.1 機器學習簡介
人工智慧：推理、邏輯、認知表達、行爲、**學習**
什麽是學習->人是怎麽學習的：機器能從**經驗或是資料**中學習，而後在**某個問題與任務**上**衡量標準**能有所提升，稱爲機器學習

例：考試學習
* 訓練資料：參考書
* 問題與任務：考試
* 衡量標準：分數
![2.1.1](https://hackmd.io/_uploads/S10r0ZfQyl.png)


## 2.2 機器學習的問題類型
### 監督式學習（Supervised Learning)
* 訓練資料：
包括**資料與標簽**
* 目標：
學習資料與標簽之間的**關係**

例：綫性回歸（Linear regression）
資料：坪數
標簽：售價
![2.2.1](https://hackmd.io/_uploads/BkdUCWzmJe.png)


---
### 非監督式學習（Unsupervised Learning)
* 訓練資料：
僅包含資料本身，**無標簽**
* 目標:
學習資料之間所**隱含的結構**

例：分群（Clustering）
* 社交網路分析
資料：興趣、照片、發文......
![2.2.2](https://hackmd.io/_uploads/HkfDC-zQ1l.png)


---
### 增强學習（Reinforcement Learning)
* 訓練資料：
來自一系列與**環境互動**的**行動**與**獎勵回饋**
* 目標：
學習如何**選擇動作**並獲得**纍積最大的獎勵**

## 2.3 機器學習的流程
### 機器學習的流程
![2.3.1](https://hackmd.io/_uploads/HkhOC-Gm1l.png)


* 訓練資料：
影像、語音、文章
有沒有**噪音（Noise）**、**偏誤（Bias)**、**獨立性**
* 假設集合
綫性模型、**深度學習**
* 學習演算法
決策樹、支持向量機

---
### 機器學習的目標
* 用訓練資料在加設集合中找一個最接近正是模型的**預測模型，在所有資料的表現要盡可能與真實模型一樣（Generalization)**

* 預測模型在訓練資料上表現好，**不代表在所有資料上真的表現很好（Overfitting）**

## 2.4 綫性模型的特偵轉換
### 綫性假設空間（Linear hypothesis)
* 如何創造一個綫性模型假設空間？
![2.4.1](https://hackmd.io/_uploads/HJk9CbGQke.png)

* 找靠近真實模型的點

---
### 特徵轉換（Feature Transform
* 把非綫性的問題**綫性化**
* 把資料轉換到**新空間**，再用綫性模型處理
* 真實模型多半非常複雜
用**特徵轉換Φ（x）**來調整成比較接近綫性關係的樣子，再來用綫性模型近似
![2.4.2](https://hackmd.io/_uploads/BkUqC-fX1e.png)


## 2.5 Overfitting & Regularization

以下爲機器學習選出的三種假設
![2.5.1](https://hackmd.io/_uploads/SJp9AWG7yl.png)

1. Overfitting 模型
2. 穩定基本資料
3. Underfitting 模型

---
### Overfitting
* 容易受資料影響
**簡單模型優先**
* 資料有噪音或變異很大
**清理與預處理資料**

---
### Regularization
* 要如何避免學習演算法挑到太複雜的假設->限縮再假設空間能挑的範圍
![2.5.2](https://hackmd.io/_uploads/B1EjAZfX1x.png)


# 神經網路(一) (Neural Network - 1)
## 3.1 神經網路 Neural Network

### 生物神經網絡架構
![3.1.1](https://hackmd.io/_uploads/ByWm6gvQJe.png)

* **樹突**：負責接收來自其他神經元的訊號，將這些訊號傳遞到細胞體。它們像樹枝一樣分支擴展，增加了與其他神經元連接的表面積。
* 	**細胞體**：包含細胞核和大多數細胞器，負責維持神經元的正常功能。細胞體處理來自樹突的訊號，並作出是否傳遞神經衝動的決定。
* 	**細胞核**：位於細胞體內，包含遺傳物質（DNA），負責調控細胞的基因表達和新陳代謝活動。
* 	**軸突**：是一條長且細的纖維，將來自細胞體的神經衝動傳遞到其他神經元或目標細胞（如肌肉細胞）。
* 	**髓鞘**：包裹在軸突外的脂肪質絕緣層，能夠加快神經衝動的傳導速度。由許旺細胞（許旺细胞）構成。
* 	**許旺細胞**：製造並維持髓鞘，支援神經元的功能。
* 	**郎飛結**：位於髓鞘之間的節點，能使神經衝動以“跳躍式傳導”的方式快速傳遞，增加了傳導效率。
* 	**軸突終末**：軸突的末端部分，與其他神經元或目標細胞形成突觸，負責釋放神經遞質，將神經訊號傳遞給下一個細胞。
---
### 生物神經元的傳遞方式
* **訊號接收**：樹突從其他神經元或感覺細胞接收電或化學訊號。
* **訊號處理**：這些訊號在細胞體中整合，如果訊號總和超過閾值，細胞體會觸發動作電位。
* **訊號傳導**：動作電位沿著軸突向下傳遞。髓鞘加快了傳導速度，並且在郎飛結處以跳躍式傳導的方式進行。
* **訊號釋放**：當動作電位到達軸突終末時，會引發神經遞質釋放到突觸間隙。
* **訊號傳遞**：神經遞質跨越突觸間隙，與下一個神經元的受體結合，開始新的訊號傳遞過程
---
### 生物神經網絡
* 人腦約有**860億**個神經元
* 人工神經網絡為模擬生物神經

## 3.2 神經元

### 綫性模型

* 綫性模型就是個**最簡單**的綫性神經元
![3.2.1](https://hackmd.io/_uploads/S1ag3-vQ1e.png)
* 把綫性模型加上一個**激活函數（g、b）**，成了一個**非綫性的神經元**
![3.2.2](https://hackmd.io/_uploads/SkXMn-P7yx.png)


---
### 神經元能做什麽

* 神經元可以對簡單的資料進行一刀切式的分類

![3.2.3](https://hackmd.io/_uploads/H14WTAJEkl.png)

---
### 神經元不能做什麽

* 資料複雜或任務複雜就容易出錯

![3.2.5](https://hackmd.io/_uploads/S1qXT0kN1g.png)



## 3.3 多層神經網絡

### 多層神經網絡

* 把**神經元**當作基本單位，通過**層次結構組合成神經網絡

![3.3.1](https://hackmd.io/_uploads/SJVN601Vkg.png)

* 決定結構后形成一個**假設集合**

---
### 多層神經網絡能做什麽

* 開始可以解決複雜（多層次）的資料分類
![3.3.2](https://hackmd.io/_uploads/HJcNp014yx.png)


---
### 層計算過程

* 前一層輸出，傳遞下一層當作輸入->類似遞回
![3.3.3](https://hackmd.io/_uploads/HkfBp01V1l.png)


---
### 輸出層計算過程

* 分類問題：使用**Softmax**來轉換機率分佈
![3.3.4](https://hackmd.io/_uploads/S13r6Ck4Jl.png)


Softmax:

## 3.4 計算流程圖與梯度

### 計算圖 (Computational graph)

* 任何的計算過程都能用流程圖來表示
![3.4.1](https://hackmd.io/_uploads/ByDU6R1Nkl.png)


---
### 神經網絡計算圖

* 先做矩陣相乘，再全部加起來
![3.4.2](https://hackmd.io/_uploads/rykPT01Nye.png)


**計算圖建構工具**
* Tensorflow: https://www.tensorflow.org/?hl=zh-cn
* Pytorch: 
https://pytorch.org/

---
### 梯度 (Gradient)

![3.4.3](https://hackmd.io/_uploads/HkwvTAkN1e.png)

* 梯度的概念就是x改變多少對於f(x)值的影響有多大

---
### 梯度計算圖

* 計算過程用流程圖來表示，并且能像向后計算梯度
![3.4.4](https://hackmd.io/_uploads/rkXdTAyNyx.png)


# 神經網路(二) (Neural Network - 2)
## 4.1 損失函數

### 損失函數（Loss Function）
* 衡量任務表現（神經網絡）好不好

---
### 回歸問題（Regression Problem）
* L1 Loss : ｜x-y｜
* L2 Loss :  (x-y)²
* 標簽與輸出都是實數，計算彼此差異
*![4.1.1](https://hackmd.io/_uploads/S1o_60y41l.png)


---
### 分類問題（Classification Problem）
* 0/1 Loss : 
    * 分類正確->1
    * 分類錯誤->0
* 標簽是以one-hot vector的方式表示是哪個類別
![4.1.2](https://hackmd.io/_uploads/BJGFpA1EJx.png)

上圖的方法就是log（那個點的几率）× 它所獲得的分數

## 4.2 梯度下降演算法

### 最佳化問題（Optimization problem）
* 包含一個目標函數與多個限制條件所組成，在符合條件下，最大化或最小化目標函數
* 機器學習問題往往是一個最佳化問題
    * 目標函數：最小化訓練誤差
    * 限制條件：Regularization

---
### 梯度下降演算法（Gradient descent）
* 類似回滾
* 通過回滾概念 將f（θ）往下滾
![4.2.1](https://hackmd.io/_uploads/SJ5FaCyVkl.png)


* 梯度指引**正確方向**，學習率決定**往前走多遠**
* 陷在**局部最優**，而不是全局最優->No-convex problem
* 學習率扮演重要關鍵->要能**自動調整**
* 計算簡單快速->二階微分效果更好，但計算量太大

## 4.3 訓練神經網絡

### 計算梯度
![4.3.1](https://hackmd.io/_uploads/HJs5a0JVyg.png)
![4.3.2](https://hackmd.io/_uploads/Hyo5TAk4kl.png)
![4.3.3](https://hackmd.io/_uploads/Syi9pRJN1l.png)


---
### 更新參數
![4.3.4](https://hackmd.io/_uploads/HkHsa01V1x.png)


## 4.4 訓練神經網路的困難
### 區域最小值（Local minimum）
* 區域最小值不一定是全局最小值
![4.4.1](https://hackmd.io/_uploads/HyAiTCk4Jg.png)

* 解決方法：增加隱藏層->複雜，但**變異高度差距小**
![4.4.2](https://hackmd.io/_uploads/r1HhTRJ4Jg.png)


---
### 鞍點
* 到達某一點之後訓練**過程停止**
![4.4.3](https://hackmd.io/_uploads/rkZapC141e.png)

* 解決方法：增加Noise->訓練過程中得到**擾動**->不會停在鞍點

---
### 梯度消失
* 反向計算時，下一層再等上一層資料會等不到，因爲激活函數將資料吃掉
![4.4.4](https://hackmd.io/_uploads/SkuT6Ak41g.png)

    * 解決方法：換一個激活函數，使用**Relu Function**

# 邁向深度學習

## 5.1 特徵學習
### 什麽是特徵
* **特徵**是一個函數，能截取出**輸入的某些特性**

    * 貓的那組後面數字代表的是有無

---
### 什麽是好的特徵
* 特徵要搭配得上問題
* 好的特徵需要有**代表性**，需要可以**容忍變異性**

---
### 人工定義特徵
* 依靠經驗、研究
* 一旦問題不同都要重新定義

---
### 自動學習特徵
* **層次結構**更有效率的重複利用已經學習到的特徵，**組合成更複雜的特徵**
![image](https://hackmd.io/_uploads/ryL36GxXJe.png)
* **組成特定的權重值**，代表從資料中學習到的模式

## 5.2 表徵學習

### 什麽是表徵
* 心智表徵：**假設性**的，能夠**表示外在現實**的**内在認知象徵**，或是一種可以**讓心智過程得以利用**的内在認知表象
* 資料表徵：以不同的**基底**聊描述資料
* 分散式表徵（Distributed representation）：提供簡單明確的表示，但在表示能力上有所限制（高維度）
* 非分散式表徵（Non Distributed representation）：能夠捕捉數據之間的相似性，適合複雜的數據表示（低維度）

---
### 表徵學習
* 主成分分析（PCA：Principal components analysis）：將多維度資料進行降維尋找相似性
* 自動編碼機（Autoencoder）
    * 將輸入資料**壓縮編碼**成表徵
    * 學習到的**表徵需要隱含足夠的輸入資料的訊息**
    ![image](https://hackmd.io/_uploads/SyxNbQemye.png)

* 深度學習
    * 層次結構能**逐層**的利用學習到的特徵，形成新的表徵
    * **深層表徵**在很多問題上非常重要
    * **表徵與特徵是共同學習出來的**

## 5.3 回顧神經網絡的發展歷史
* 300BC：亞里斯多德- 探討人類如何學習
* 1873：Alexander Bain - 探討人類神經元之間的反應、學習（赫布型學習）
* 1943：McCulloch & Pitts - MCP Model, 最早的神經元模型
* 1949：Donald Hebb - 赫布型學習問世
* 1958：Frank Rosenblatt - 第一個人工神经网络（感知器）問世，是一种二元线性分类器。
* 1974：Paul Werbos - BP演算法出現
* 1980：Teuvo Kohonen - 自主分類演算法出現（SOM）
* 1980：Kunihiko Fukushima - 新認知機出現
* 1982：John Hopfield - Hopfield神經網絡，神經網絡首次出現出現記憶功能
* 1985：Hilton & Sejonwski - 波茲曼機器
* 1986：Paul Smolensky - 限制波茲曼機器，改進
* 1986：Michael I.Jordan - 提出循环神经网络(RNN) 
* 1990：Yann LeCun - 最早的捲積神經網絡（LeNet）
* 1997：Schuster & Paliwal - 雙向RNN
* 1997：Hochreiter & Schmidhuber - 长短期记忆（LSTM）進階RNN
* 2006：Geoffrey Hinton - 首次出現深度學習一詞，**開啓深度學習時代**
* 2009：Salakhutdinov & Hinton - 深度波茲曼機器機器
* 2012：Geoffrey Hinton - Dropout概念被提出

## 5.4 深度學習新突破

### 深度學習突破
* 多層神經網絡難訓練
    * 2006年，Hinton提出**逐層訓練方法**
    * 逐層訓練法：
        * 學習第一層的表徵
        * 將第一層的表徵當第二層的輸入
        * 逐層學習到深層
* 新突破
    * 更多資料量
    * 更快的計算
    * 更大、更複雜的模型
    * 更好的演算法
    * 更瞭解模型内部結構

---
### 邁向深度學習
* 捲積神經網絡（Convolution neural network）
* 遞回神經網絡（Recurrent neural network）
* 記憶與注意力機制（Memory and attention）
* 生成式模型（Generative model）
* 深度增强學習（Reinforcement learning)

# 捲積神經網路 (Convolution Neural Network)
## 6.1 摺積神經網路
### 視覺感知過程
![6.1.1](https://hackmd.io/_uploads/SJfpkUmm1e.png)

* 不同點光源都有一個神經元進行感知
---
### 稀疏鏈接
* 區域特徵
    * 影像**相鄰像素**比較遠的像素之間更有關係
![6.1.2](https://hackmd.io/_uploads/r1w2JLQQ1x.png)


* 部分意義不大的特徵直接放棄學習，這些被放棄的特徵就是係數鏈接
* 可以有效地減少神經元的學習參數
    * Regularization
    * 對於資料有**區域特徵的先驗知識**
---
### 參數共享
* 若區域特徵重複出現，則共有同一參數

## 6.2 摺積與反摺積
### 摺積的數學定義
![6.2.1](https://hackmd.io/_uploads/rJ4dgIX7kg.png)
* -a的部分就是“摺”
* 摺積
    * Input：(輸入數量，高度，寬度，厚度)
    * Kernel：（高度，寬度，厚度）
    * Padding：額外補多少邊界
    * Stride：一次移動多少
* 摺積與反摺積互爲**反操作**
* 摺積為綫性運算
## 6.3 摺積神經網絡架構
### 摺積神經網絡
![6.3.1](https://hackmd.io/_uploads/HJXr4I7XJl.png)
![6.3.2](https://hackmd.io/_uploads/BkuYHUmmkx.png)
* Kernel代表一個區域特徵
* 冗餘特徵（reductant feature）
    * 同一個特徵，但角度不同
---
### pooling layer
* 將面積變小->減少計算量
![6.3.3](https://hackmd.io/_uploads/B15YILmmke.png)
* Max-pooling 僅讓輸出最强的神經元通過
    * **過濾最强**的訊號
        * 僅考慮特徵有無
        * 犧牲空間資訊
    * 增强輸入**特徵的不變性**
        * 增加神經元感受區域
---
### 神經元感受區域
* 維度改變
    * 由**寬淺**變爲**窄深**
![6.3.4](https://hackmd.io/_uploads/B1qwvIQXye.png)
## 6.4 深度殘差網絡
### 跳躍結構
* 神經網絡加深，學習容量增加->同時**參數增加**，**更難訓練**
![6.4.1](https://hackmd.io/_uploads/SJofcU7X1g.png)
### 殘差神經網絡
![6.4.2](https://hackmd.io/_uploads/Sy8ScUmX1g.png)
* 若想跳過F(x)就設它為0
# 遞迴神經網路 (Recurrent Neural Network)
## 7.1 隱藏馬可夫模型
### 序列資料學習
* 資料序列
    * 時間序列是一組時間排序的隨機變數
    * 股票、語音
* 探討隨機變數之間的關係
    * 給定一個序列，問發生的几率
        * P(早安)>P(安早)
    * 給定一個序列，預測下一個狀態
        * P(嗎|你好)>P(他|你好)
    * 給定一個序列，預測一整個序列
        * p(how are you|你好嗎)
---
### 圖機率模型
* 一種結合圖的表示與機率的學習方法
![7.1.1](https://hackmd.io/_uploads/HkOVskL7ke.png)
* Representation
    * 如何表示隨機變數閒的關係
    * 獨立性
* Inference 
    * 給定一些觀察到的狀態，估計其他的隨機變數
* Learning
    * 給定資料學習圖形結構或參數
* 好處： 
    * 可彈性加入先驗知識
        * 建立隨機變數之間關係
        * 獨立性可大幅簡化模型複雜度
    * 與深度學習關係
        * 圖形結構表示
        * Restricted Boltzman Machine 
---
### 隱藏馬可夫模型
* 含有隱藏狀態的序列圖機率模型
    * 無法觀察到的隱藏過程
* 馬可夫性質
    * P(xt|xt-1)

## 7.2 遞回式神經網絡計算過程
### 遞回式神經網絡
* 用神經網絡來處理序列資料
    * 對比隱藏馬可夫模型
* 記憶性
    * 整個過去歷史都會影響現在
![7.2.1](https://hackmd.io/_uploads/Sy2JMl8Xye.png)
* 每個時間點都**加入新的資訊給隱藏狀態**
* 每個時間點h(t+1)包含**過去到現在的資訊**，用來計算輸出
* 與HMM比較,**隱藏狀態為一個連續的向量，可以容納更多訊息**
---
### 延展計算過程
![7.2.2](https://hackmd.io/_uploads/rJEgNeUQ1l.png)
![7.2.3](https://hackmd.io/_uploads/rytgVeUmke.png)

## 7.3 序列至序列學習架構
### 序列表徵
![7.3.1](https://hackmd.io/_uploads/rynVIxI7Je.png)
* 將整句話的意義壓縮至隱藏層的向量内
---
### 序列值序列學習
* 多用於機器翻譯、聊天機器人
![7.3.2](https://hackmd.io/_uploads/BJdSDe8mye.png)

## 訓練遞回神經網絡

# 最新研究進展
## 8.1 最新深度學習研究進展
### 注意力機制
* 視覺注意力機制
    * 減少認知負載
---
### Machine translation
![8.1.1](https://hackmd.io/_uploads/r1cOeWvX1l.png)
* 只將注意力放在最相關的字上，減少負載
---
### Attenion Is All You need
![8.1.2](https://hackmd.io/_uploads/BkU4W-PQyg.png)
## 8.2 生成式模型
* 一種瞭解世界的方法
* Working models
    * Model: captures some of the structure in the world,but not all
    * Working: simulate this part of the world, imagining what will follow from different initial conditions
### PixelCNN
* Joint distribution of pixels over an image x
* 總之就是透過先前的資料判斷下一個像素的走向
![8.2.1](https://hackmd.io/_uploads/S1ta4WwXyg.png)
---
### Variational Autoencoders
![8.2.2](https://hackmd.io/_uploads/BJFTr-Pmyl.png)
* 變分自編碼器
![8.2.3](https://hackmd.io/_uploads/rytILWDmJx.png)
* 可創建新的資料，但多屬流變
---
### Generative Adversarial Networks
* Generator
    * Transformation models
* Discriminator
    * 判斷image space哪些區域最爲真實
![8.2.4](https://hackmd.io/_uploads/ByVgw-vXJg.png)
## 8.3 增强式學習
### Reinforcement Learning
* 增强式學習就是機器與環境互動的結果，在互動的過程中會獲得回報，目標就是使回報最大化
![8.3.1](https://hackmd.io/_uploads/Sk-7_WvQJx.png)

### Deep learning in RL
* Policies
    * Deep Policy Gradient
* Value functions
    * Deep Q learning
