thảo luận [Thảo Luận] Data Analysis, ML, DL, AI (All Levels vào đây chém gió nào)

Mình đang có vấn đề này trong việc hiểu cách mà LSTM hay nói rộng hơn la các mô hình RNN hoạt động. Hi vọng có bạn nào hiểu giải thích lại vấn đề này cho mình.

Theo những gì mình đọc, thì mô hình sẽ nhớ "memory" qua mỗi bước thời gian. Khi mình đọc cái này, mình nghĩ mô hình sẽ tự động nhớ tìm các mốc thời gian trước đó trong dataset.
Nhưng khi mình làm thử, thì mình thấy các giá trị trước đó lại được truyền vào model như 1 feature, kiểu như thế này. Cột t thậm chí chỉ có giá trị để sort, chứ thực sự cũng ko truyền vào model.

t (x0)y tại t-1 (x1)y tại t-2 (x2)y
2020-01-019810
2020-01-0210911
2020-01-03111012

Hiện tại thì mình ko thấy nó khác gì với regression cả. Vậy thực sự cái gọi là "memory" ở trong LSTM hay bao quát hơn là trong RNN nó nằm ở đâu? Ý là lúc dựng regression thì nó sẽ ưu tiên các giá trị ở cuối train dataset hơn là ở đầu chăng.

Hiện giờ mình có khá nhiều vấn đề trong việc hiểu cách hoạt động các model deel learning này. Công việc của mình thì ko phải là data scientist, không phải là người implement trực tiếp, nhưng lại cần hiểu tất cả vấn đề ở tầm khái quát. Hi vọng có bác nào rành giải thích giúp mình.

Short answer: bạn hiểu đúng rồi đó "memory" trong RNN chỉ là lấy cái ouput của thời điểm t - 1 trước đó đưa vào làm input thêm với cái input đang xử lý ở thời điểm t. Cái memory này chỉ có tác dụng trong 1 lần loop cho 1 sequence, khi qua sequence khác nó sẽ reset.

Khác nhau với các giải thuật "không nhớ" khác là cách mình input data point. Ví dụ với RandomForest hay simple ANN, để xử lý data dạng time series bạn phải flat data ở các thời điểm t vào 1 input rồi đưa vào model xử lý 1 lần.
Ví dụ trên thì X = [y tại t-1, y tại t-2]

Còn RNN thì sẽ có thêm 1 chiều là time nên lúc đưa vào thì đưa theo 1 sequence các data point. Lúc đưa vào model RNN nó sẽ xử lý mổi sequence bằng cách loop qua từng sequence element (data point từng thời điểm t) để ra ouput cuối cùng. Ví dụ trên thì input là 1 sequence:
X:
[[y tại t-2], <~~~ sequence element
[y tại t-1]] <~~~ sequence element

Long answer:
Simple RNN bản chất cũng là chính cái model ANN "không nhớ", nhưng thay vì xử lý 1 đường thẳng từ input -> hidden layers -> ouput thì RNN sẽ có 1 cái vòng lặp để đem cái ouput này (thời điểm t-1) đưa ngược lại (recurrent) làm cái input thêm vào cái sequence element (thời điểm t) đang xử lý để cho cái state ở thời điểm t-1 "có tham gia" vào quá trình quyết định ouput của thời điểm t.

Ý tưởng của RNN bắt nguồn từ cách xử lý thông tin của não người. Ví dụ bài toán phân loại 1 cái comment review sản phẩm là tốt hay xấu. Các model không nhớ như Random Forest, ANN thì phải convert toàn bộ đoạn comment này thành 1 vector rồi xử lý 1 lần. Trong khi não người khi đọc comment sẽ đọc từng từ, từng câu và khi đọc não người sẽ nhớ những từ, câu đã đọc trước đó và lấy nó làm dữ kiện để hiểu các từ, câu tiếp theo.

Hình này mình lấy trong sách Deep Learning with Python của François Chollet, François Chollet là tác giả tạo ra Keras. Hình bên phải minh họa khi loop qua từng sequence element thì output sinh ra được đem vào input để xử lý sequence element tiếp theo.

RNN.png


LSTM thì bản chất vẫn là RNN chỉ khác 1 chổ là ouput sinh ra được mang đi xuyên suốt các sequence element tiếp theo thay vì chỉ đem vào input của sequence element liền sau nó. Giống như đọc comment review có 5 dòng thì mình đọc tới dòng thứ 4 vẫn nhớ được dòng 1, 2, 3 nói gì. Simple RNN vẫn có khả năng này nhưng thông tin bị mất mát do nó bị biến đổi thành ouput qua các lần loop chứ ko truyền trực tiếp như LSTM.

LSTM.png
 
Last edited:
Mình có background về lập trình C/C++.
Giờ tính học thêm chuyên về Computer vision.
Ngày trước trong trường có làm đề tài nhỏ dùng openCv nhưng lâu rồi không dùng nên quên hết (cả Toán luôn).
Vì vậy, mấy bác cho mình hỏi hiện tại nên bắt đầu lại từ đâu, học khóa học nào, nếu có certificate thì càng tốt cho sau này nhưng hiện tại chắc học mấy khóa free để lấy lại nền tảng trước.

Ko chuyên về Computer Vision nên chỉ có vài lời thế này thôi:
1. Ôn lại những gì đã học và làm được trước đó. Học thêm Python.
2. Học Deep Learning vì đây là giải thuật cốt lõi bên Computer Vision.
 
Phiền bác giới thiệu cho mình khóa học hay sách về Deep Learning.
Cám ơn bác!

Deep Learning thì có vài cuốn như sau:

Neural Networks and Deep Learning của Michael Nielsen. Ai đọc được cuốn này sẽ hiểu rất rõ về ANN. Cuốn này chỉ cách implement ANN từ đầu tới cuối mà không dùng thư viện để nhận dạng số viết tay. Đọc cuốn này xong tha hồ chém gió, hù dọa với những ai làm Deep Learning mà chỉ biết xài tensorflow. :shame:
http://neuralnetworksanddeeplearning.com/index.html

Dive into Deep Learning: nội dung khá đầy đủ, bao trùm nhiều mảng
https://d2l.ai/

Deep Learning with Python - François Chollet: đọc dễ hiểu, thiên về pratice hơn.
https://www.amazon.com/Deep-Learning-Python-Francois-Chollet/dp/1617294438
 
Không đi làm thì không có kinh nghiệm, không có kinh nghiệm thì không xin được việc. Cái vòng luẩn quẩn này thì phải làm sao :))

Một sự thật phũ phàng là ngành này việc tìm khó vì k phải chỗ nào cũng cần như SE. Nhu cầu ít, các cty nhiều khi chỉ cho chữ AI vào để chém gió sản phẩm. Nếu hám danh vào cty chém gió thì lương lậu cũng được, sau vài năm trào lưu qua đi thì k có hướng đi tiếp.
Chỗ tuyển nghiêm túc thì prefer là có Master, PhD.

Việc các opensource hiện nay đã hạ thấp độ khó của ngành này xuống, việc từ học đi đến một cái output đơn giản thì rất nhanh, nhưng các bạn làm được thì người khác cũng làm được. Mấy cái LSTM, Transformer cũng k phải là khó để hiểu trong thời điểm hiện tại, sách vở rất nhiều, cái khó là kinh nghiệm để train data, cho bạn data không chuẩn,unbalanced , nhiều noise, làm sao bạn train được thì cái đó chả sách nào dạy được cả. :)

Học theo phong trào thì học xong cũng k có chỗ ứng dụng đâu các thím ơi, khuyên thật các thím, học SE cho chắc chắn đi.

bZut9mH.gif
Ngành này nó yêu cầu khá nhiều kiến thức nên em nghĩ mấy người học theo phong trào không có cửa làm ăn gì với ngành này và tự bị đào thải cả thôi.
 
Deep Learning thì có vài cuốn như sau:

Neural Networks and Deep Learning của Michael Nielsen. Ai đọc được cuốn này sẽ hiểu rất rõ về ANN. Cuốn này chỉ cách implement ANN từ đầu tới cuối mà không dùng thư viện để nhận dạng số viết tay. Đọc cuốn này xong tha hồ chém gió, hù dọa với những ai làm Deep Learning mà chỉ biết xài tensorflow. :shame:
http://neuralnetworksanddeeplearning.com/index.html

Dive into Deep Learning: nội dung khá đầy đủ, bao trùm nhiều mảng
https://d2l.ai/

Deep Learning with Python - François Chollet: đọc dễ hiểu, thiên về pratice hơn.
https://www.amazon.com/Deep-Learning-Python-Francois-Chollet/dp/1617294438
Chủ thớt cho mình xin mấy quyển book để đọc làm Data Analyst nha thớt.
Quyển nào dính tới python thì càng tốt.
Thanks chủ thớt nhiều.
 
Chủ thớt cho mình xin mấy quyển book để đọc làm Data Analyst nha thớt.
Quyển nào dính tới python thì càng tốt.
Thanks chủ thớt nhiều.

Tựa sách thì mình list ra từ đầu thớt hết rồi. Còn muốn làm Data Analyst với Python thì có thể tìm cuốn này:

Think Stats Exploratory Data Analysis in Python
https://www.amazon.com/Think-Stats-Exploratory-Data-Analysis/dp/1491907339

Nếu thím hỏi kiếm mấy cuốn này ở đâu thì google 1 phát là sẽ có. Còn làm biếng google thì mua trên Amazon.
 
nếu 3 - 6 tháng làm analyst rồi lên engineer được không thím, không biết gì từ đầu học analyst

Tôi trả lời thím rồi, học để cho có kiến thức tươm tất mất khoảng 2 năm... muốn biết thì lấy 1 trong những cuốn sách trên đọc thử xem vào ko, nếu thấy thú vị thì tiếp, thấy chán thì biết rồi, nên theo hướng khác ko phải mất thời gian.

There is only one way to find out...
 
Tôi trả lời thím rồi, học để cho có kiến thức tươm tất mất khoảng 2 năm... muốn biết thì lấy 1 trong những cuốn sách trên đọc thử xem vào ko, nếu thấy thú vị thì tiếp, thấy chán thì biết rồi, nên theo hướng khác ko phải mất thời gian.

There is only one way to find out...
ios tôi học 21 ngày là có basic làm 2013 dĩ nhiên có nền lâp trình c rồi
thì cái này bao lâu thím
 
ios tôi học 21 ngày là có basic làm 2013 dĩ nhiên có nền lâp trình c rồi
thì cái này bao lâu thím

sẵn cho hỏi thím đọc 1 cuốn 300pages chuyên ngành mất bao lâu :D

Mình làm 1 thử nghiệm nhỏ nhé. Tôi cho bạn 7 ngày (1/3 thời gian học iOS) để bạn tìm hiểu khái niệm Kernel density estimation bạn phải hiểu tường tận và code lại được (visualize cái curve của nó). Nếu bạn làm được và show code lên đây thì 3-6 tháng là có thể, ngược lại bạn mất 2 năm.
Và trong ngành này, đây chỉ là 1 trong rất nhiều khái niệm cơ bản mà bạn phải nắm.
 
Last edited:
Mình làm 1 thử nghiệm nhỏ nhé. Tôi cho bạn 7 ngày (1/3 thời gian học iOS) để bạn tìm hiểu khái niệm Kernel density estimation bạn phải hiểu tường tận và code lại được (visualize cái cure của nó). Nếu bạn làm được và show code lên đây thì 3-6 tháng là có thể, ngược lại bạn mất 2 năm.
Và trong ngành này, đây chỉ là 1 trong rất nhiều khái niệm cơ bản mà bạn phải nắm.
mình mới coi sơ mặc dù chưa biết 1 cái gì nhưng khả năng dễ đó thớt ko tới 7 ngày và mình cam đoan luôn nếu học tầm 2.5 tháng là ok

ps mình từng phát minh cách ghi nhớ riêng vì mình đã nghiên cứu qua critical-thinking và psychoanalytic , 1 tí Neuroscience rồi :D
 
Short answer: bạn hiểu đúng rồi đó "memory" trong RNN chỉ là lấy cái ouput của thời điểm t - 1 trước đó đưa vào làm input thêm với cái input đang xử lý ở thời điểm t. Cái memory này chỉ có tác dụng trong 1 lần loop cho 1 sequence, khi qua sequence khác nó sẽ reset.

Khác nhau với các giải thuật "không nhớ" khác là cách mình input data point. Ví dụ với RandomForest hay simple ANN, để xử lý data dạng time series bạn phải flat data ở các thời điểm t vào 1 input rồi đưa vào model xử lý 1 lần.
Ví dụ trên thì X = [y tại t-1, y tại t-2]

Còn RNN thì sẽ có thêm 1 chiều là time nên lúc đưa vào thì đưa theo 1 sequence các data point. Lúc đưa vào model RNN nó sẽ xử lý mổi sequence bằng cách loop qua từng sequence element (data point từng thời điểm t) để ra ouput cuối cùng. Ví dụ trên thì input là 1 sequence:
X:
[[y tại t-2], <~~~ sequence element
[y tại t-1]] <~~~ sequence element



View attachment 244958

Như vậy là, cái mà truyền lần lượt và liên tục các feature trên 1 dòng à, VD 1 row trong train data set có:

X1(Y tại t-3)X2(Y tại t-2)X3(Y tại t-1)Y
1234

Thì khi evaluate 1 row, thì nó vẽ lần lượt cái (có thể là linear) regression cho từng cặp X với Y, VD X1(Y tại t-3) với Y, x2(Y tại t-2) với Y, x3(Y tại t-1) với Y, rồi những cái cặp bị evalute lúc sau thì sẽ bị chịu tác động bởi các cặp được evaluate phía trước nhỉ.

Lúc trước mình cứ nghĩ là nó sẽ evaluate theo chiều dọc (theo row) cơ, hóa ra là tác động theo chiều ngang (theo column).

Nhưng chuyện gì sẽ xảy ra nếu features không phải chỉ có (Y tại t-x) mà còn có các X khác tại t-x?

VD mình có dataset

DateSố thuê bao lớnSố lượng sử dụng
2020-01-0110100

Chuyện gì sẽ xảy ra nếu mình muốn feature ngoài số lượng sử dụng của 1, 2, 3 tháng trước, còn có số thuê bao lớn của 1,2,3 tháng trước làm feature? train data set sẽ trông thế nào, có phải là thế này ko nhỉ

DateSố thuê bao lớn (tại -3, -2, -1 tháng trước)Số lượng sử dụng (tại -3,-2, -1) tháng trướcSố lượng sử dụng
2020-01-01[7, 8, 9][70, 80, 90]100
2020-01-02[8, 9, 10][80, 90, 100]110
2020-01-03[, 1, 11]09[90, 100, 110]120

Mà feature của 1 row của mấy cái mô hình LSTM này có phải đảm bảo đúng thứ tự gì không (như thời gian xa hơn đặt trược, gần hơn đặt sau), rồi có được mix time step ko nhỉ (VD cái thì -3_-2_-1 nhưng cái thì -2_-1_0)
 
Như vậy là, cái mà truyền lần lượt và liên tục các feature trên 1 dòng à, VD 1 row trong train data set có:

X1(Y tại t-3)X2(Y tại t-2)X3(Y tại t-1)Y
1234

Thì khi evaluate 1 row, thì nó vẽ lần lượt cái (có thể là linear) regression cho từng cặp X với Y, VD X1(Y tại t-3) với Y, x2(Y tại t-2) với Y, x3(Y tại t-1) với Y, rồi những cái cặp bị evalute lúc sau thì sẽ bị chịu tác động bởi các cặp được evaluate phía trước nhỉ.

Lúc trước mình cứ nghĩ là nó sẽ evaluate theo chiều dọc (theo row) cơ, hóa ra là tác động theo chiều ngang (theo column).

Nhưng chuyện gì sẽ xảy ra nếu features không phải chỉ có (Y tại t-x) mà còn có các X khác tại t-x?

VD mình có dataset

DateSố thuê bao lớnSố lượng sử dụng
2020-01-0110100

Chuyện gì sẽ xảy ra nếu mình muốn feature ngoài số lượng sử dụng của 1, 2, 3 tháng trước, còn có số thuê bao lớn của 1,2,3 tháng trước làm feature? train data set sẽ trông thế nào, có phải là thế này ko nhỉ

DateSố thuê bao lớn (tại -3, -2, -1 tháng trước)Số lượng sử dụng (tại -3,-2, -1) tháng trướcSố lượng sử dụng
2020-01-01[7, 8, 9][70, 80, 90]100
2020-01-02[8, 9, 10][80, 90, 100]110
2020-01-03[, 1, 11]09[90, 100, 110]120

Mà feature của 1 row của mấy cái mô hình LSTM này có phải đảm bảo đúng thứ tự gì không (như thời gian xa hơn đặt trược, gần hơn đặt sau), rồi có được mix time step ko nhỉ (VD cái thì -3_-2_-1 nhưng cái thì -2_-1_0)

Bạn đang hỏi cách input của RNN hay đang hỏi cách input của các giải thuật không nhớ như ANN, Random Forest?

RNN thì evaluate theo không gian 3 chiều nha bạn, cái mình nói ở trên là cho 1 sequence. Ví dụ có 2 features, lookback=3, 100 samples thì input shape sẽ là (100, 3, 2), cái (3, 2) là 1 sample (sequence), 3 dòng 2 cột và khi nó evaluate sẽ loop cho 3 dòng này thôi, và 3 dòng này phải đảm bảo đúng thứ tự thời gian, làm xong sẽ đi tiếp cho 99 samples còn lại.

Còn cái kia thì tùy thuộc lookback bao nhiêu ngày mà sẽ xếp các cột lên hết, ví dụ lookback = 3
X = x1_t1, x2_t1, x1_t2, x2_t2, x1_t3, x2_t3. Input shape sẽ là (100, 6), 6 ở đây là nó phải flat 3 dòng 2 cột vì phải xử lý 1 lần chứ ko có loop như RNN. ML model sẽ nhìn vào 6 cái features đó (2 features cho mổi ngày, lookback 3 ngày) rồi dự đoán cái predicted_y, so sánh cái predicted_y với y thật trong training set được truyền vào rồi update weight matrix. Nó cứ làm vậy cho tới khi loop hết các 99 samples còn lại.
 
Như vậy là, cái mà truyền lần lượt và liên tục các feature trên 1 dòng à, VD 1 row trong train data set có:

X1(Y tại t-3)X2(Y tại t-2)X3(Y tại t-1)Y
1234

Thì khi evaluate 1 row, thì nó vẽ lần lượt cái (có thể là linear) regression cho từng cặp X với Y, VD X1(Y tại t-3) với Y, x2(Y tại t-2) với Y, x3(Y tại t-1) với Y, rồi những cái cặp bị evalute lúc sau thì sẽ bị chịu tác động bởi các cặp được evaluate phía trước nhỉ.

Đây là input của các giải thuật không nhớ, không phải của RNN. Và cách nó evaluate là thế này:
nhận vào input = X1(Y tại t-3), X2(Y tại t-2), X3(Y tại t-1) ===> predicted_Y (Y tại t) ví dụ ra 3.5. Rồi nó so sánh predicted_Y này với Y thật là 4, thấy có sự chênh lêch, nó sẽ update weight matrix. Nó evaluate 1 lần 3 features để ra predicted_Y nhé. Cái này hoàn toàn không tính tới sự tác động X1 lên X2, X2 lên X3, X3 lên Y.

Cho nên RNN nó mới phải loop qua X1, X2, X3 để ra được predicted_Y. Nói cho đơn giản thì thế này, (outcome_of_predicted_Y0, X1) => (outcome_of_predicted_Y1, X2) => (outcome_of_predicted_Y2, X3) => predicted_Y
Lưu ý cái X1, X2, X3 ở đây có thể có nhiều features như ví dụ bạn đưa ra: X1(x1_a, x1_b), X2(x2_a, x2_b).
 
Last edited:
:D mình làm AI đến nay cũng được khoảng 3 năm rồi, làm chính là về computer vision. Theo kinh nghiệm của mình thì làm cái này mà kiểu cầu bất cầu bơ thì cũng chả có gì là quá khó nhưng nếu muốn làm nghiêm túc thì tương đối là khoai. Vấn đề ngành này nó lại yêu cầu cao ở rât nhiều mảng, nghĩa là bạn làm model giỏi, kiến thức tốt nhưng vẫn cần có kĩ năng SE cứng. Vì sao ? vì bh ngta luôn làm product, mấy cái research mấy cty bth chả bh chuyên làm cả, thường là vừa làm AI vừa là SE luôn
Một điểm lưu ý là bh tài liệu rất nhiều, free cũng có, open source cũng nhiều nhưng đã học cái gì thì phải hiểu cái đó :v đừng như cái trend Mì AI bỏ mẹ gì đó :LOL: đào tạo ra một lứa chả hiểu cái gì chỉ biết git clone rồi python train.py :))
Chốt lại ngành này là ngành có tiềm năng phát triển nữa chứ cũng k phải là trend ngắn hạn. Tuy nhiên cần suy nghĩ kĩ vì ngành này yêu cầu tương đối là cao, cần sự chăm chỉ và tìm tòi nhất định :D muốn ăn xổi thì cũng được nhưng rồi sẽ đến lúc nhận ra mình k có chỗ đứng nữa thì lúc đấy tất cả cũng đã muốn :v dù gì thì ưu điểm cũng là đang trend + yêu cầu cao nên lương lậu cũng tương xứng.
Một góc chia sẻ nhỏ cho bác nào muốn đâm lao nhé :v
 
Back
Top