---
# System prepended metadata

title: 深度學習原理與實務 part.I
tags: [DeepLearning, '20200801']

---

# 深度學習原理與實務 part.I
###### tags: `20200801` `DeepLearning`
蔡炎龍
政治大學應用數學系

## 問題化為函數
(舉例的內容可能不太對，但可以比較容易了解)
### 古典AI法
給予一個「規則」，利用這個規則來判斷

### 傳統機器學習
文章暗示他是中立客觀的（不會出現他是中立客觀這樣的關鍵詞），所以要找比較多的關鍵詞，會影響文章屬性的關鍵詞。

降維 => 把變數減少（會誤傷）
降維的方法
> 1. 用砍的，用數值的相關性，但是....會誤傷，因為有時候會資料的相關性是要把一群資料放在一起，才能處理。
> 2. 用PCA，找出比較重要的來做

機器學習會花很多時間來處理feature engineering

### 深度學習
自動的feature engineering

深度學習，會花比較多的時間來「問問題」，問題問對了，就可以讓機器自己學出來的解法是正確的

### 小結
碰到一個問題，不同的AI有不同的方向去處理問題
> 中立客觀不一定是中立客觀

## 問題化為函數
輸入輸出很清楚，這樣就結束了

> 函數其實是一個解答本，所有的問題，都有一個答案

由於電腦要算，所以輸入與輸出都只能是數字，數字才能算

我們只有部分函數的解答，然後利用這些資料與已知解答的函數來學習

## 深度學習 (神經網路)三大天王
1.NN 全連結的神經網路
2.CNN 圖形辨識很強的神經網路
3.RNN 具有記憶功能的神經網路

> 化成一個函數的形式 要定義的很清楚，才能夠有解答

> 輸入的維度與輸出的維度要相同

知名套件tensorflow - 計算資料維度的轉換
[tensorflow](https://www.tensorflow.org/learn?hl=zh-tw) <- 超連結

假設輸出是整數，但出現小數該怎麼辦？
(這樣的情形出現，是因為資料本身沒有連續性)

輸出改使用one-hot encoding(每次只有一個1)

### 3.準備訓練資料
收集資料是件快樂的事情，因為要花更多的時間

人類唸書的時候，不懂的東西就會背下來。
神經網路也會，也就是overfitting

> 要注意的事情：
> 1. 資料需要上萬筆(甚至更多)
> 2. 資料是否在合理努力下可以取得的

深度學習要給一個初始值，這個起始值其實只要隨機的給就好。他就會自己跑了


## 問問題的各種可能

函數的定義：就是一個解答本

> 函數不可以的是
> 1. 不可以沒有解答
> 2. 不可以出現兩個答案

#### 股價
日期->f(x)->日期，股價
雖然有數據，但不會有結果

要有足夠的資料，用不同的方式來問問題

看顯微照片，判斷有沒有病毒

---
#### 字型
(字型的案例，好像就是我們要做的事)
（哎呦跟我們要做的很像哦）
（看來要來留這個老師的聯絡方式，以後有問題可以問）

---
#### 職棒
職棒的案例
有一些資料，其實不知道跟打全壘打有沒有關係
(用RNN)
跑出來了，但是不準
可以用預測區間的方式來解決

---
#### 對話機器人
想到用逐字去預測，但是會發生一對多的結果，不能成為函數
但改用RNN因為會把回憶當成一種輸入，可以達成結果。

EOS = End of sequence (序列的結尾)

一開始機器人會用輸入的文字來預測下一個應該回應的文字，一直到輸入的序列結束。機器人會回應第一個文字，但會再把第一個回應的文字拿來再做預測，然後產生回應。

---
#### 創作
生成對抗網路GAN

做兩個網路，一個去做創作，一個去做辨識
(感覺書法大師也是可以用GAN?)
(是的，跟我這禮拜自己去閱讀的文章也是這樣說的)

---
#### 玩遊戲
這是電腦自己去學的
意義在於當他在複雜的場域時，可以自己去學習


---
#### 小結
最重要的就是問問題！！！

#### 標準的，沒辦法做的
我想要知道紅蘿蔔怎樣會長得最快
>沒有輸入、沒有輸出，也沒有函數

## 神經網路
> 問問題會是最重要的事情，實務的人與技術的人問問題的方式不一樣。

> 在神經網路很紅的時候(1980-1990)，因為它可以很強大的學習，不用寫函數、不用寫數學式，都可以學習

失敗的原因
> 1. 複雜的軟體 -> 參數太多、內容複雜，出了問題根本無從修起
> 2. 電腦計算能力不夠
> 3. 大量的數據 -> 記憶體不夠

現在可以成功，因為上面三個問題可以解決了!

### DeepMind
很愛寫論文的公司

## 神經網路 NN
全連結的神經網路，每一個計算結果都會傳到下一個神經元，所以全部連在一起。
1. 決定要有幾層hidden layers
2. hidden layers 每一個隱藏層要決定有幾個神經元
3. 每一個神經元都要數字輸入進來(刺激)，然後計算加權和X1W1+X2W2+...XnWn，這個W1,W2...Wn式學習來的。然後還要學習一個偏差值b，最後會產生一個輸出，傳到下一層的神經元的計算。
4. 但這樣的傳遞，只會是一個線性函數。所以會做一個轉換，使他變成非線性 - 激發函數 (activation function)

### 激發函數

1. ReLU
    最常用的激發函數，這個世紀的王
    小於0的時候，y=0，大於0的時候是y=x (大於0的時候還是線性函數)
2. Sigmoid
    最接近人類的函數
3. Gaussian
    上個世紀常用，現在不用了，套件已經不提供這個函數了

### 歷史
上個世紀，神經網路大概只有一層二層，因為大概三層電腦也無法運算了。

邏輯比較多的，就要多幾層(3層或3層以上)，邏輯少的就少層(1或2層)

這個世紀再講深度學習，都要超過3層以上才叫深度學習（沒意義的堅持，一個"我們不一樣"的概念）


## 神經網路的訓練方式

> 數學式寫希臘字母比較高大上 (讚) [color=#53db41] 
> [time=Sat, Aug 1, 2020 12:08 PM]
> 

#### loss function
就是找正確答案yi與計算出來的結果F(xi)的距離(就是2個點之間的誤差)，

### * 簡而言之，就是誤差越小越好 

下一步就是簡化loss function

> 就是在找L(w)這個function上的切線
> 做微分，找最小值
> 

> (A:下午開一個新的共筆)
> (W:我下午就撤退了阿...)
> (A:已羨慕)

---

前往[Part.II](https://hackmd.io/@EM091/B17fn_fWv)

