Một số quick note phổ biến

Posted by Hao Do on August 20, 2022

Word2vec

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'''
- Dung de bien mot tu thanh mot vector so thuc
- Phuong phap co ban nhat la dung one-hot vector.
- Moi vector se co do dai bang so tu trong "tu dien", 
- Moi vector co mot phan tu bang 1 tai vi tri tuong ung voi vi tri
cua tu do trong tu dien.
--> Nhuoc diem:
+ do dai cua vector rat lon.
+ khong xac dinh duoc su tuong quan giua cac tu vi tich vo huong bang 0.
- word2vec giup bien 1 tu o dang one-hot vector thanh 1 vector moi
voi so chieu nho hon nhieu (300 - 1000) va tinh duoc su tuong quan giua
hai tu dua vao tich vo huong giua 2 vector bieu dien cua no.
- Ve co thi word2vec la mot mang neural voi 1 hidden layer, khong co
activation function, layer cuoi la mot softmax regression
'''
print('Thong tin co ban ve word2vec')


1
2
3
4
5
6
7
8
9
10
11
12
- Word2vec dùng để biến một từ thành một vector số thực
- phương pháp cơ bản nhất là dùng one-hot vector
- Mỗi vector sẽ có độ dài bằng số từ trong từ điển
- Mỗi vector có một phần tử bằng 1 tại vị trí tương ứng với vị trí của từ đó trong từ điển
- Nhược điểm
	+ Độ dài của vector rất lớn 
	+ không xác định được sự tương quan giữa các từ vì tích vô hướng của nó bằng 0
- word2vec giúp biến 1 từ ở dạng one-hot vector thành 1 vector mới với số chiều
nhỏ hơn rất nhiều (300-1000) và tính được sự tương quan giữa hai từ đưa vào
tích vô hướng giữa hai vector biểu diễn nó.
- Về cơ bản thì word2vec là một mạng neural với 1 hidden layer, không có
activation function, layer cuối là một softmax regression.

Captcha

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
'''
- dung de phan biet 'human' vs 'bot'

- vi du: 
+ Go lai cac tu trong mot buc anh ma chu da bi lam meo mo.
+ Doc so nha trong mot buc anh thuc
+ tim anh tuong ung trong rat nhieu anh
+ xac dinh nhung o vuong nho trong mot anh lon co chua mot vat the.

- Muc dich thu vi cua captcha:
+ thu thap nhan cho du lieu (chua co nhan).
+ Bang cach cho nguoi dung lam nhieu bai test (co bai test da co nhan,
co bai test chua co nhan), Neu ket qua dung (o bai test da co nhan) -->
human --> nhung dap an (o bai test cho co nhan) co do tin cay cao. -->
cach rat hay de thu thap nhan cua du lieu.

--> Co the su dung doan van ngan (co the post/comment) va trac nghiem nguoi dung ve (sac thai/
noi dung) --> thu thap nhan cua cac doan van do --> classifier
'''
print('Thong tin ve captcha!')


1
2
3
4
5
6
7
8
9
10
11
12
13
14
- Nó dùng để phân biệt human vs bot
- Ví du: 
	+ Gõ lại các từ trong một bức ảnh mà chữ đã bị làm méo mó.
	+ Đọc số nhà trong một bức ảnh thực
	+ Tìm ảnh tương ứng trong rất nhiều ảnh
	+ Xác định những ô vuông nhỏ trong một ảnh lớn có chứa một vật thể
- Mục đích thú vị của captcha:
	+ Thu thập nhãn cho dữ liệu (chưa có nhãn)
	+ Bằng cách cho người dugnf làm nhiều bài test (có bài test đã có nhãn, có bài chưa có nhãn)
	+ Nếu kết quả đúng (ở bài test đã có nhãn) --> human --> những đáp án (ở bài test chưa có nhãn)
	sẽ có độ tin cậy cao. --> Cách rất hay để thu thập nhãn của dữ liệu.
	
- Có thể sử dụng đoạn văn bản ngắn (post/comment) và trắc nghiệm người dùng về sắc thái,
nội dung --> thu thập nhãn của các đoạn văn đó --> classifier

Binary Hashing for Information Retrieval

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
'''
- Information Retrieval la tim nhung items trong csdl lien quan query.
- Vi du: google search hay google search image

- Neu csdl la hinh anh --> image retrieval (IR).
+ Concetp-based IR: tim kiem dua vao thong tin cua anh (caption, labels,
tags, phan text xung quanh). vi du nhu search hinh anh bang 1 text query
+ Content-based IR: tim kiem dua vao noi dung anh (pixel anh). vi du,
tim kiem hinh anh bang query hinh anh.

- Image classification: 1 buc anh se duoc phan vao 1 hoac mot vai class.
- IR: Ket qua tra ve co the thuoc nhieu class khac nhau  (challenge)
- Voi IR: phuong phap pho bien la Similarity search

+ Kho khan: 'bieu dien' anh duoi dang vector co the 'tinh toan' duoc do
'gan nhau' giua cac buc anh. --> Feature extraction. --> Neu dataset 
qua lon --> thoi gian. --> Kho khan thu nhat

+ Co the giai quyet kho khan thu nhat --> DL --> su dung mo hinh CNN cho 
image classification noi tieng (tuc la no duoc trained voi csdl lon va
dat ket qua cao) --> feature vector co do dai giong nhau cho moi buc 
anh. Cu the, dau ra cua layer gan cuoi cung (truoc softmax hoac svm layer)
duoc dung nhu 1 feature tot (co do dai khoang vai nghin) --> Neu tinh toan
va luu tru thi bat kha thi --> kho khan thu 2

+ De giai quyet kho khan 2, thuong dung binary hashing --> 'map' cac 
feature tren thanh 1 vector nhi phan co do dai nho (32, 64) --> vector
nay goi la 'hash code'

+ keyword: deep binary hashing for image retrieval.
'''

print('Binary Hashing for information Retrieval')


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- Information Retrieval là tìm những items trong csdl liên quan đến query
- Ví dụ: google search, hoặc google search image

- Nếu csdl là hình ảnh --> image retrieval (IR)
	+ Concept-based IR: tìm kiếm dựa vào những thông tin của ảnh (caption, labels, tags)
	+ Ví dụ: như search hình ảnh bằng 1 text query
	+ Content-based IR: tìm kiếm dựa vào nội dùng của ảnh (pixel image)
	+ Ví dụ: tìm kiếm hình ảnh bằng query hình ảnh.
- Image classification: một bức ảnh sẽ được phân vào 1 hoặc một vài lớp.
- IR: kết quả trả về có thể thuộc nhiều class khác nhau, đây là một thử thách.
- Với IR: phương pháp phổ biến là Simalarity search.
	+ Khó khăn: 'biểu diễn' ảnh dưới dạng vector có thể 'tính toán' được độ 'gần nhau'
	giữa các bức ảnh --> người ta gọi đó là feature extraction. Nếu dataset quá lớn 
	sẽ ảnh hưởng về mặt thời gian (khó khăn 1)
	+ Có thể giải quyết khó khăn 1: Deep learning --> sử dụng mô hình CNN cho image classification
	nổi tiếng như (tức là nó được trained với csdl lớn và đạt kết quả cao)
	+ --> Tìm được feature vector có độ dài giống nhau cho mỗi bức ảnh.
	+ Cụ thể, đầu ra của layer gần cuối cùng (trước softmax hoặc svm layer được dùng như
	1 feature tốt có độ dài khoảng vài nghìn. --> Nếu tính toán thì cũng khá phức tạp (khó khăn 2)
	+ Để giải quyết khó khăn 2, thường dùng binary hashing --> 'map' các feature trên
	thành 1 vector nhị phân có độ dài nhỏ (khoảng 64) --> vector này gọi là hash code.
- Keyword: deep binary hashing for image retrieval

Simalarity search at Flickr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
'''
- Y tuong tu k-means clustering.
- Gia su, viec tim kiem rat nhieu tren 1 ti buc anh --> ton thoi gian.
- Thay vao do, cluster cac buc anh thanh 1 trieu cluster (moi cluster
co 1 centroid) --> viec tim kiem cac anh gan giong voi 1 buc anh (query)
duoc thuc hien sau 2 buoc:
+ b1: centroid gan nhat voi query se duoc chon.
+ b2 cac anh trong cluster ung voi centroid se chon de so sanh anh query.
--> day la ki thuat xap xi moi vector bang 1 vector khac (trong truong
hop nay la centroid), keyword: vector quantization (VQ)
--> viec tao clustering tu 1 ti buc anh ra 1 trieu clusters (trainning
processing) va so sanh 1 query voi tung clster (test process) --> ton
thoi gian --> de xuat su dung Product Quantization (PQ)

- Trong PQ, moi vector duoc chia doi thanh 2 vector con. Nhu vay, se co
2 nhom, moi nhom co 1 ti vector con. Thuc hien keam tren moi nhom voi k 
= 1000 --> moi nhom co 1000 centroids, --> 2000 centroids (sub-centroid)
--> full centroid (1000 * 1000 = 1M). Khi test chia query thanh 2 phan va
tim centroid gan nhat ung voi moi query do. Only co 2000 sub --> tinh toan
nhanh hon rat nhieu.

- Flickr dung ky thuat dua tren PQ, goi la LOPQ.
'''

print('Similarity search at Flickr')


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- Ý tưởng từ k-means clustering
- Giả sử, việc tìm kiếm rất nhiều trên một tỉ bức ảnh --> tốn thời gian.
- Thay vào đó, cluster các bức ảnh thành 1 triệu cluster (mỗi cluster có 1 centroid)
việc tìm kiếm các ảnh gần giống với 1 bức ảnh (query) được thực hiện theo 2 bước:
	+ b1: centroid gần nhất với query sẽ được chọn
	+ b2: các ảnh trong cluster ứng với centroid sẽ được chọn để so sảnh ảnh query.
	+ Đây là kỹ thuật xấp xỉ mỗi vector bằng 1 vector khác (trường hợp này là centroid)
	+ keyword: vector quantization (VQ)
	+ Việc tạo clustering từ 1 tỉ bức ảnh ra 1 triệu cluster (trainning process) và so sánh
	1 query với từng cluster (test process) --> tốn thời gian.
	+ Đề xuất dùng Product Quantization (PQ)
- Trong PQ, mỗi vector  được chia đôi thành 2 vector con (như vậy sẽ có 2 nhóm)
mỗi nhóm có 1 tỉ vector con.
	+ thực hiện kmeans trên mỗi nhóm với k = 1000, chúng ta sẽ có 2000 sub-centroid.
	+ full centroid là 1 triệu. Khi test chia query thành 2 phần và tìm centroid trên mỗi nhóm
	+ Chỉ có 2000 sub nên việc tính toán nhanh hơn rất nhiều.
- Flickr dùng kỹ thuật dựa trên PQ (gọi là LOPQ)	

Imbalanced data in classification

1
2
3
4
5
6
7
8
9
10
11
12
'''
- Cac phep do thuong do su dung voi du lieu chenh lech:
+ Precison, Recall, F1 score, ROC curves
+ Pho bien nhat: Precision va Recall
- Can phai 'Resampling' de hai classes co du lieu tuong doi nhu nhau.
+ thuong la under-sampling hoac over-sampling
+ Doi voi bai toan binary classification (imbalanced) dung logistic
regression se rat tot. Co the dung nguong la 0.35 thay vi phai dung
nguong 0.5
'''

print('Imbalanced data in classification!')


1
2
3
4
5
6
- các phép đo thường được sử dụng với dữ liệu chênh lệch: Precision, Recall, F1 score, ROC
	+ Phổ biến nhất là Precision, Recall
- Cần phải 'Resampling' để hai classes có dữ liệu tương đối nhau.
- thường thì under-sampling hoặc over-sampling
- đối với bài toán binary classification (imbalanced) thì dùng logistic regression sẽ tốt.
- Có thể dùng ngưỡng là 0.35 (thay dùng vì ngưỡng 0.5)

Transfer learning cho bài toán phân loại ảnh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
'''
- Truoc day, image classification thuong duoc chia thanh 2 buoc: 

+ feature engineering (su dung cho image)
# SIFT (scale invariant feature transform)
# SURF (speed-up robust feature)
# HOG (histogram of Oriented Gradients)
# LBP (Local binary patteern)

+ train a classifier.
# Multi-class SVM
# Softmax regression
# Discriminative Dictionary Learning
# Random Forest

- DL phat trien, nhieu mo hinh cho image (ResNet, VGG) voi csdl imagenet

- Nhin chung, cac mo hinh nay gom nhieu layers. Cac layer phia truoc
thuong la (Convolutional layers) ket hop void nonlinear (activation
function) va pooling layer (goi chung la ConvNet). Layer cuoi la (
Fully Connected Layer) va thuong la Softmax Regression.

+ So luong units o layer cuoi bang voi so luong classes (imagenet la 1000)

+ Layer gan cuoi (second to last layer) co the coi la "feature vector"
va softmax regression chinh la classifier duoc su dung.

- Transfer learning la phuong phap su dung mo hinh co san duoc trained
tu truoc, va su dung mot vai ky thuat khac de giai quyet bai toan.

- Khai niem 'ConvNet as fixed feature extractor' - tuc la su dung truc 
tiep 'vector' o 'second to last layer' lam 'feature vector'. Sau do,
fine-tuning se giup ket qua tot hon.


- Fine-tuning the convnet: huong tiep can nay la su dung cac weights da
duoc trained tu cac mo hinh ConvNet nhu la khoi tao cho mo hinh moi voi
du lieu moi va su dung pp back propagation de train lai mo hinh moi hoac
train lai mot so layer cuoi --> de tranh overfitting.

+ Nhung layer dau trong convNet thuong extract dac tinh chung cua anh (
cac canh - goi la low level features), cac layer cuoi (dac trung rieng
cua csdl - high level features) --> train cac layer cuoi -> hieu qua.

Chu y: khi tiep tuc train cac mo hinh nay, can chon learning-rate thap.

'''
print('transfer learning cho bai toan phan loai anh')


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- Trước đây, image classification thường được chia thành 2 bước: 
+ feature engineering (su dung cho image)
# SIFT (scale invariant feature transform)
# SURF (speed-up robust feature)
# HOG (histogram of Oriented Gradients)
# LBP (Local binary patteern)

+ train a classifier.
# Multi-class SVM
# Softmax regression
# Discriminative Dictionary Learning
# Random Forest

- Deep learning phát triển, nhiều mô hình cho image (ResNet, VGG) với csdl imagenet

- Nhìn chung, các mô hình này gồm rất nhiều layers. Các layer phía trước
thường là (Convolutional layers) kết hợp với nonlinear (activation function)
và pooling layer (gọi chung là ConvNet). Layer cuối là (Full Connected Layer)
và thường sử dụng Softmax.

+ Số lượng units ở layers cuối bằng với số lượng classes (imagenet là 1000)

+ Layer gần cuối (second to last layer) có thể coi là "feature vector" và softmax regression
chính là classifier được sử dụng.

- Transfer learning là phương pháp sử dụng mô hình có sẵn được trained từ trước
và sử dụng một vài kỹ thuật khác để giải quyết bài toán.

- Khái niệm 'ConvNet as fixed feature extrator' tức là sử dụng trực tiếp 'vector'
ở 'second to last layer' làm 'feature vector'. Sau đó, fine-tuning sẽ giúp kết quả tốt.

- Fine-tuning the convNet: hướng tiếp cận này là sử dụng các weights đã được trained từ các
mô hình ConvNet như là khởi tạo cho mô hình mới với dữ liệu mới và sử dụng phương pháp
back propagation để train lại mô hình mới hoặc train lại một số layer cuối --> tranh overfitting

+ Nhưng layer đầu trong convnet thường extract đặc trưng của anh (các cạnh - low level),
các layer cuối (đặc trưng riêng của csdl - high level) --> train các layer cuối tốt hơn.

Chú ý: khi tiếp tục train cho các mô hình này, learning-rate thấp.

Full ipynb

Tài liệu tham khảo

Machine learning cơ bản

Hết.