Machine learning

社課 - 1

lecturer : lemon

topic : intro & math

Where can we take course?

What is ml

機器學習 => 讓機器自己學習如何進步並解決問題

“A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.”

今天檸檬想要使用Machine Learning,辨識跟他聊天的是真的女生還是真的男生。根據他遇到一些好的或不太好ㄉ體驗結果,他記下每次的聊天對象的性別,希望能夠改良程式使他獲得更好的聊天體驗。

請問在這個情境下,Task(T)是哪個選項?

(A) 看檸檬到底遇到了幾個男生

(B) 程式正確預測檸檬會不會遇到女生的準確度

(C) 將檸檬的聊天對象以比較可能是男生還是女生做分類

(D) 以上皆非,他不會遇到女生,這根本不是ML可解決ㄉ問題

supervised vs unSUPERVISED

  • Supervised learning      => 監督學習
  • Unsupervised learning => 非監督學習

差別在於

資料是否有標準答案

supervised learning

 

資料是有標準答案ㄉ那個

e.g. 房價預測、圖像辨識

unsupervised learning

 

資料是沒有標準答案

e.g. 人聲分離、顧客分析

how do i apply these ideas?

透過數學程式語言

而程式語言將會使用Python <3

我們會上一些數學方面的東東

About mathematics

我很抱歉啦,數學其實還蠻重要ㄉ

喔喔 但我不會讓一整節課都是數學啦 放心

你們主要會學到的:線性代數、微積分(微分)

我應該不會講得太難懂

btw 這堂課也有放一點數學 QAQ

About program language

其實別的程式語言也可以用啦

e.g. Octave, Matlab, 甚至 Java script 和 C++

Python編寫容易、功能強大,現在幾乎是最熱門的選擇ㄌ

尤其我們這次會大量使用到Python提供的函式庫

肯定是直接用爆Python的啊

順帶一提

如果不會Python語法的話

可以考慮上禮拜四的小社

About framework

Framework => 框架

簡單來說,就是有電神幫忙寫好

方便開發、使用的大型程式庫

e.g. PyTorch, Tensorflow, Keras

但我們沒有要用這個 ㄎㄎ

cuz 這樣比較難以了解背後的原理

math class -- LINEAR ALGEBRA

v = \begin{bmatrix} a_{1}\\a_{2}\\a_{3}\end{bmatrix}\quad

這是一個 3-dimensional vector

一個數字就是一個維度 => 三維向量

我們通常以小寫字母表示一個向量

對於一個\(n\)維向量\(v\),我們寫作\(v \in R^{n}\)

math class -- LINEAR ALGEBRA

M = \begin{bmatrix} a_{1,1}&a_{1, 2}\\a_{2, 1}&a_{2, 2}\\a_{3, 1}&a_{3, 2} \end{bmatrix}

這是一個 3 by 2-dimensional matrix

有三列(row, 橫的)、兩行(column, 直的)

我們通常以大寫字母表示一個矩陣

對於一個\(n \times m\)的矩陣\(M\),我們寫作\(M \in R^{n \times m}\)

明顯地,當\(n \neq m,\ R^{n \times m}\ \neq R^{m \times n}\)

math class -- LINEAR ALGEBRA

v = \begin{bmatrix} a_{1}\\a_{2}\\a_{3}\end{bmatrix}\quad

看看左邊的向量,我們可以發現:

它是一個 3-dimensional vector

也是一個 3 by 1-dimensional matrix

這是替身攻擊!

R^{n} = R^{n \times 1}

也就是說

我們可以把向量看成是一種矩陣的特殊情況

所以後面我都只講矩陣(摸頭燦笑

math class -- LINEAR ALGEBRA

矩陣和向量是可以跟一般的常數做乘法

其實就把矩陣中的每個東西都拿來乘而已

對常數k,\ 矩陣M = \begin{bmatrix}a_{1,1}&a_{1,2}\\a_{2,1}&a_{2,2}\end{bmatrix}
M \times k = \begin{bmatrix}a_{1,1} \times k&a_{1,2} \times k\\a_{2,1} \times k&a_{2,2} \times k\end{bmatrix}\\

math class -- linear algebra

M_1 = \begin{bmatrix} a_{1,1}&a_{1,2}\\a_{2,1}&a_{2, 2}\\a_{3, 1}&a_{3, 2}\end{bmatrix},\quad M_2 = \begin{bmatrix} b_{1,1}&b_{1,2}\\b_{2,1}&b_{2, 2}\\b_{3, 1}&b_{3, 2}\end{bmatrix}
M_{1} \pm M_{2} = \begin{bmatrix}a_{1,1} \pm b_{1,1}&a_{1,2} \pm b_{1,2} \\ a_{2,1} \pm b_{2,1}&a_{2,2} \pm b_{2, 2} \\ a_{3,1} \pm b_{3,1}&a_{3,2} \pm b_{3, 2} \end{bmatrix}

直接加(減)就對ㄌ (\(M_1的維度要等於M_2\))

math class -- linear algebra

M_1 = \begin{bmatrix} a_{1,1}&a_{1,2}\\a_{2,1}&a_{2, 2}\\a_{3, 1}&a_{3, 2}\end{bmatrix},\quad M_2 = \begin{bmatrix} b_{1,1}&b_{1,2}&b_{1,3}\\b_{2,1}&b_{2,2}&b_{2,3}\end{bmatrix}

乘法比較麻煩 QAQ

只有在 \(A \in R^{n \times m}\ 且\ B \in R^{m \times k}\) 乘法才有意義

得到的結果 \( A \times B \in R^{n \times k}\)

上面的栗子:

M_1 \times M_2 \in R^{3 \times 3}\ 而\ M_2 \times M_1 \in R^{2 \times 2}\

math class -- linear algebra

來個小測驗(確定大家的腦袋還沒燒掉

假設 \(a \in R^{20},\ B \in R^{15 \times 20}\)

因為檸檬不太會這題

請告訴檸檬 \(a \times B\ 和\ B \times a\ 的維度\)是多少?

(A) \(R^{20 \times 15},\ R^{15 \times 1}\)

(B) \(R^{15 \times 20},\ 無意義\)

(C) \(無意義,\ R^{15}\)

(D) 我知道答案,但我不想告訴他

math class -- linear algebra

所以矩陣乘法到底怎麼算?

M_1 = \begin{bmatrix} 3&1 \\ 4&5 \\ 2&2 \end{bmatrix},\ M_2 = \begin{bmatrix} 3&1&2 \\ 4&5&8\end{bmatrix}
M_1 \times M_2 = \begin{bmatrix} 13 & 8 &14 \\ 32 & 29 & 48 \\ 14 & 12 & 20 \end{bmatrix}
\begin{bmatrix} 3&1&2 \\ 4&5&8\end{bmatrix}
\begin{bmatrix} 3&1 \\ 4&5 \\ 2&2 \end{bmatrix}
\begin{bmatrix}\quad & \ & \ \\ \ & \ & \ \\ \ & \ & \ \end{bmatrix}

先看最左上角那一個交點

先由最遠的開始相乘,之後加起來

\(3 \times 3 + 1 \times 4 = 13\)

math class -- linear algebra

btw 我們沒有要教除法

但還有一個很重要的東西要說

Transpose => 轉置

若M = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix}
M的轉置,\ M^T = \begin{bmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{bmatrix}

math class -- linear algebra

再來個小測驗(這是最後ㄌ

a = \begin{bmatrix} 1 \\ 3 \\ 4 \end{bmatrix},\ b = \begin{bmatrix} 2 \\ 3 \\ 2\end{bmatrix}

請你告訴檸檬 \(a \times b^T =\ ?\)

(A) \(\begin{bmatrix}2&3&2\\6&9&6\\8&12&8\end{bmatrix}\)

(B) 無意義

(C) \(19\)

(D) 學長我想回家ㄌ

Python -- Numpy

import numpy as np #引入NumPy

#建立兩個矩陣
A = np.array([
	[1, 2],
	[3, 4]
])

B = np.array([
	[5, 6],
	[7, 8]
])

print(A+B)
print("--------------")
print(A-B)
print("--------------")
print(A*B)

覺得矩陣很難ㄇ

NumPy早就想到這點了

話不多說,用用看就知道ㄌ

Python -- Numpy

運行剛剛的程式碼

你會發現輸出結果是:

[[ 6  8]
 [10 12]]
--------------
[[-4 -4]
 [-4 -4]]
--------------
[[ 5 12]
 [21 32]]
其中\begin{bmatrix}1&2\\3&4\end{bmatrix} \times \begin{bmatrix}5&6\\7&8\end{bmatrix} \neq \begin{bmatrix}5&12\\21&32\end{bmatrix}

Python -- Numpy

這是因為NumPy的+ - * /預設是element-wise

也就是讓每一格的元素分別+ - * /後輸出一個新的矩陣

我們可以試試下面的程式碼:

print(np.add(A,B))
print("--------------")
print(np.subtract(A,B))
print("--------------")
print(np.dot(A,B))
其他答案相同的情況下\\ 我們得到正確的\ A \times B = \begin{bmatrix} 19 & 22 \\ 43 & 50 \end{bmatrix}

Python -- Numpy

其實矩陣的加減本來就是element-wise

至於為什麼會用到不同的函式來做同一件事

其實它不完全一樣

為了知道到底差在哪

我們可以先來了解

NumPy的Broadcast

Python -- Numpy

a = np.array([
  [1],
  [2]
])

print(A)
print(f"shape = {A.shape}")#輸出A的維度
print("---------------")
print(a)
print(f"shape = {a.shape}")#輸出a的維度
print("---------------")
print(A+a)
print(f"shape = {(A+a).shape}")#輸出A+a的維度

運算會根據給定的矩陣

自動的延伸、廣播

讓+ - * /有更強的擴充性

Python -- Numpy

Broadcast對其他的- * /也是適用的

這個技巧很方便ㄉ

感覺很常用到(?

print(A+a)
print("--------------")
print(A-a)
print("--------------")
print(A*a)
print("--------------")
print(A/a)

Python -- colab

今後的程式練習

我們會用Google的Colab

今天的部分就是讓你們熟悉一下NumPy和Colab

這是李連杰(不好笑

檔案 => 在雲端硬碟中儲存副本

然後就可以開始寫ㄌ

喔喔 我前面有放我上課講的Code

可以去看看ㄛ <3

大概就這樣了

下禮拜就可以做出簡單的人工智慧ㄌ

大家一定要來喔

不會那麼數學了啦 (茶

introduction&vectorization

By lemonilemon

introduction&vectorization

  • 413