9/21/2021

Tính toán tiến hóa | Tài liệu, chuyên ngành


Trong CTDL hay thuật toán ứng dụng các bạn đã biết tới bài toán người du lịch (TSP) là 1 bài toán NP-Khó, tức là để có thể đưa ra lời giải của bài toán chúng ta chỉ có cách là duyệt toàn bộ. Tuy nhiên thì điều này chỉ thỏa mãn và hợp lí với những bài mà N nhỏ khi N lớn thì không gian tìm kiếm tăng nhanh và việc duyệt toàn bộ để tìm ra kết quả tối ưu là gần như không thể. Trong các môn CTDL hay thuật toán ứng dụng chúng ta cũng chỉ được làm quen bài toán TSP với những giá trị N nhỏ để thực hiện duyệt toàn bộ tìm ra lời giải tối ưu của bài toán.

Tuy nhiên khi N tăng thậm chí là N rất lớn chúng ta vẫn có thể tìm được lời giải tối ưu của bài toán này (chỉ là có thể thôi nha) bằng các giải thuật tiến hóa. Các giải thuật tiến hóa đang được phát triển và sử dụng rộng rãi trong việc giải quyết các bài toán tối ưu NP-Khó, NP-Đầy đủ.


Có thể các bạn hơi ngỡ ngàng nhưng tính toán tiến hóa là 1 nhánh của trí tuệ nhân tạo nghiên cứu các giải thuật tối ưu tìm kiếm dựa trên học thuyết tiến hóa Darwin.

Có nhiều bạn đọc từ đầu tới giờ cứ tưởng như là chúng ta đang làm quen với môn sinh học mất, nhưng chỉ là lấy ý tưởng từ sinh học thôi nha, giải thuật tiến hóa là các giải thuật mình thấy rất là hay và lab cô Bình là lab tối ưu làm rất nhiều về giải thuật tiến hóa, bạn nào quan tâm tới vấn đề tối ưu thì có thể xin vào lab cô Bình nha, mình sẽ có riêng 1 bài viết khác về lab cô Bình nên bài viết này mình không lan man nhiều về vấn đề này.

Môn học này theo mình biết thì hiện tại chỉ có cô Bình dạy thôi, cô dạy môn này thì nói chung là rất thoải mái cả về giờ giấc lẫn cách học, chủ yếu là các bạn sẽ được phân vào các nhóm nghiên cứu trên lab của cô để làm bài tập lớn thôi, giữa kì các bạn sẽ trình bày về 1 cái gì đó mà mình học được trong nhóm cùng các anh/chị như là trình bày lại 1 bài báo mà mình đọc được hay là trình bày cách giải quyết 1 đề tài được các anh/chị trong nhóm giao. Về cơ bản thì không nhất thiết phải sử dụng các giải thuật di truyền mà các bạn có thể sử dụng các giải thuật heuristic, trình bày về các giải thuật heuristic cô đều chấp nhận và đồng ý hết. 

Dưới đây mình chia sẻ tới các bạn 1 số bài giảng, tài liệu dành cho môn học này gồm có slide bài giảng, và 1 số bài báo đã được public về k-coverage, q-coverage: 

  • Slide môn học tính toán tiến hóa: PDF | PPTX | ZIP (các bạn lên mang slide đi in ra nha, nhớ khi in dùng bản powerpoint - pptx nha để có thể in được full các phần, bản pdf nhiều trang các hình ảnh sẽ bị đè nên chữ)

9/17/2021

Tạo biểu đồ ER Diagram cho cơ sở dữ liệu với MySQL Workbench | Share


ERD là một loại lưu đồ minh họa cách các “thực thể” như con người, đối tượng hoặc khái niệm liên quan với nhau trong một hệ thống. Sơ đồ ER thường được sử dụng để thiết kế hoặc gỡ lỗi cơ sở dữ liệu quan hệ trong các lĩnh vực kỹ thuật phần mềm, hệ thống thông tin kinh doanh, giáo dục và nghiên cứu.

Biểu đồ ER được sử dụng để lập mô hình và thiết kế cơ sở dữ liệu quan hệ, về mặt logic và các quy tắc nghiệp vụ (trong mô hình dữ liệu logic) và về công nghệ cụ thể sẽ được thực hiện (trong mô hình dữ liệu vật lý.) Trong kỹ thuật phần mềm, một sơ đồ ER thường là bước đầu tiên để xác định các yêu cầu cho một dự án hệ thống thông tin. Sau này nó cũng được sử dụng để lập mô hình một cơ sở dữ liệu hoặc các cơ sở dữ liệu cụ thể. Cơ sở dữ liệu quan hệ có một bảng quan hệ tương đương và có thể được biểu diễn theo cách đó khi cần thiết.

Hầu hết các công cụ UI hỗ trợ các cơ sở dữ liệu đều có chức năng chuyển trực tiếp từ cơ sở dữ liệu thành biểu đồ ERD, với MySQL Workbench thì hơi khó để tìm ra điều này, mình có một hướng dẫn ngắn để giúp mọi người có thể tạo ERD rất nhanh và ngắn gọn, cùng xem video dưới của mình nha.



Xem thêm về biểu đồ ERD bạn có thể tham khảo thêm TẠI ĐÂY

9/12/2021

Nhập môn học máy và khai phá dữ liệu


Trong seri bài này mình sẽ tóm tắt các phần liên quan tới học máy và khai phá dữ liệu dựa trên slide và bài giảng môn học được thầy Thân Quang Khoát giảng dậy https://bkai.ai/ (facebook BK AI fb.com/bk.ai ). Bài viết gạch ra một số ý mà theo mình thì nên trọng tâm, tuy nhiên mình khuyên các bạn nên học bài bản và xem video vì cá nhân mình xem 1-2 lần thì vẫn hơi mông lung :(  . Đây là môn học nên tảng, cung cấp kiến thức cơ bản nhất cho các bạn theo định hướng data scientis (hiểu sơ sơ  là sử dụng các kĩ thuật học máy (cluster analysis, decision trees, random forest, neural networks, logistics regression, ...) để xây dựng các mô hình toán học phục vụ các bài toán kinh doanh ), còn cụ thể data scientis, data engineer, data analysis như nào các bạn có thể tham khảo yt.com/dataGuyStory và theo mình tìm hiểu data scientis thường là người có mức lương cao nhất.

Bài này mình sẽ tóm tắt 2 phần giới thiệu chung và Hồi quy (Regression) , còn lại một số khác như -Phân cụm(Kmean) , Học dựa trên láng giềng KNN, Cây quyết định, ... có lẽ (chỉ là có lẽ :D ) mình sẽ ra ở bài sau. Tài liệu môn học này sẽ được đăng sau nha :D 

Giới thiệu chung

  • Học máy : xây dựng hệ thống tự cải thiện bản thân bằng cách học từ dữ liệu

  • Khai phá dữ liệu : tìm ra tri thức

  • Học : improve Performance at Task, following Experience.
    ví dụ với bài toán phân loại thư rác :
    • P : độ chính xác của phân loại thư đó là rác 

    • T : phân loại

    • E : tập thư thường/ rác đã có từ trước thời điểm phân loại 

  • Bản chất của việc học : học hàm f : x -> y. f còn gọi là model (dữ liệu theo 1 mô hình nào đó ). học model là học tham số của model đó.

  • Dữ liệu học : tập học (training set, tập quan sát ) gồm X, Y (tập các x và y tương ứng). x là dữ liệu đầu vào và y là đầu ra của dữ liệu đó 

  • Phân loại: 

    • Học có giám sát ( supervised learning): 

      • Classification : Multiclass (phân loại nó vào 1 lớp), Multilabel(phân nó vào nhiều lớp - gán nhiều nhãn)

      • Regression : khác với classification là đây đầu ra liên tục.

    • Unsupervised learning (không có y, dữ liệu không có nhãn)

      • Phân cụm

      • Phát hiện xu hướng

    • Học bán giám sát :  Semi-Supervised Learning

    • Học tăng cường : Reinforcement Learning

  • Vấn đề: 

    • Giải thuật học ( chủ yếu là lặp để tối ưu) không hội tụ : No-free-lunch. không có thuận toán luôn hiệu quả trên mọi ứng dụng. mỗi bài toán cần thử nghiệm nhiều thuật toán xem cái nào tốt nhất.

    • Lựa chọn dữ liệu : nhiễu, lỗi

    • Khả năng học: khả năng khái quát hóa ( generalization) tập học để có thể  phân loại tốt trên tập thực tế(tập dữ liệu mới, tập dữ liệu tương lại  ), tránh vấn đề overfitting.

    • Overfitting (xảy ra khi khái quát hóa tốt khi học nhưng với tập dữ liệu tương lai, cái cần thì lại rất tệ ) : mô hình quá phức tạp, dữ liệu lỗi, quá bé.

    • Mong muốn tổng quát hóa cao , tương đương với việc không dính overfitting

    • Giải quyết : 1 trong số đó là kĩ thuật Regularization

Hồi quy

  • Học hàm, đầu ra liên tục

  • Linear model

  • x là đầu vào(các x i là các thuộc tính của 1 dữ liệu đầu vào / trong tập dữ liệu đầu vào ), w là trọng số, là cái cần đi học, tương đương với việc xác định đầu vào x đóng góp bao nhiêu phần vào việc quyết định đầu ra cho mô hình 

  • Cách học :

    • Hàm lỗi(lost, cost function) : với tập w hiện tại , ta sẽ tính được đầu ra, đầu ra đó là đầu ra của model (linear model ), nó hoàn toàn có thể khác với thực tế. đại loại lấy sai khác 2 cái này (đầu ra dự đoán của model với thực tế) 

    • Mong muốn lỗi này trên tất cả dữ đầu vào mà mình sở hữu trung bình thấp nhất

    • Thuật toán học : 

      • Cực tiểu hóa lỗi ordinary least squares: dùng gradient descent(từ từ cập nhật trọng số cho phù hợp )  có thể giải bằng toán học : chuyển vị gì đấy …(cho đạo hàm bằng 0 tìm luôn w cho nhanh ), vấn đề không có ma trận chuyển vị ?

      • phương pháp trên quá tập trung vào dữ liệu,không có bất cứ gì để điều chỉnh  khả năng tổng quát hóa cho tương lai =>sinh ra Ridge regression  bằng cách thêm lamda nhân bộ w(một đại lượng hiệu chỉnh mà mình đã nhắc trong bài 1 -Regularization ), hiểu là sau khi cho vào thì bạn sẽ cố gắng ép bọn w vê càng 0 càng tốt => kéo theo mỗi thuộc tính sẽ đóng góp rất ít vào việc quyết định đầu ra, tổng quát hơn (đoán thế :D). Nói chung turning lamda sẽ điều chỉnh đc độ overfitting. lamda càng lớn w càng nhỏ, lỗi tập train tăng, độ tổng quát tăng. (đánh đổi). lamda > 0 thì ma trận luôn khả nghịch

      • Lasso : cái lamda nhân bộ w ở trên cụ thể là nhân với L2 bộ w. ở đây thay L2 bằng L1. điểm hay của L1 là giảm miền tìm kiếm, lựa chọn thuộc tính(sẽ có 1 số thuộc tính không tác dụng cho w của nó = 0 ). dùng cho các bài toán nghiệm thưa . mất tính chất luôn  khả nghịch.

Mong nhận được bình luận cảm nhận, góp ý từ các bạn :(

9/10/2021

Học sâu và ứng dụng | Tài liệu, chuyên ngành


Môn này là một môn nằm trong mô-đun "Phân tích dữ liệu thông minh" của bên khoa học máy tính tức là nó đã là một môn chuyên ngành rồi, không còn là môn cơ sở ngành nữa, môn này cũng là môn chuyên ngành đầu tiên mà mình viết và chia sẻ trên website.

Deep Learning thì là một trend hot trong những năm gần đây rồi, khi mà nhà nhà học Deep, người người học Deep và môn này mang lại cho bạn những gì cơ bản nhưng cũng không hề thiếu những phần nâng cao nha vì nó là một môn chuyên ngành rồi. Các bạn sẽ được học về: 

  • Tổng quan về mạng nơ ron
  • Mạng CNN 
  • Cách huấn luyện mạng nơ ron 
  • Bài toán Object detection 
  • RNN
  • NLP
  • Ngoài ra các bạn còn được giới thiệu các phần cứng cho học máy, các công cụ phần mềm hay sử dụng trong học máy


Tuy nhiên thì thực sự mình thấy là mỗi bài tuy đề cập tới những phần nâng cao nhưng lại nói 1 cách khá tổng quát và không được chi tiết, tất nhiên rồi cũng vì thời gian của các tiết học là có hạn và các bạn muốn hiển sâu hơn bắt buộc phải tự học rất nhiều nha, môn này cũng rất nhanh mất gốc nếu 1-2 tuần mà không động vào là tối cổ luôn rồi.

Có một câu hỏi về môn này là không biết gì thì có thể học được không? tất nhiên là nếu bạn đăng kí được môn tức là bạn đã đủ điều kiện để học môn này khi đã học hết các môn điều kiện, tuy nhiên lời khuyên thực sự chân thành của mình là hãy đăng kí môn này khi đã có cho mình một ít kiến thức về hoc sâu rồi, thế nào là có kiến thức? cái này thực sự là khó định nghĩa, tùy vào bạn tin tưởng vào năng lực của bạn thân thế nào thôi, mình có thể lôi ra 1 số tiêu chí để bạn có thể xem nha: 

  • Bạn phải hiểu được luồng đi của Deep Learning, chúng ta cần làm gì, phải làm gì trong từng bước

  • Có thể tự code 1 lại 1 mạng cơ bản, bạn có thể tham khảo TẠI ĐÂY nha

  • Biết qua về 1 số framework cơ bản, qua thôi nha có thể là mxnet, tensorfow hoặc pytorch

Về tiêu chí thứ 3 mình đưa ra ý là vì bài tập lớn chắc chắn các bạn phải dùng tới các framework này nhưng trong quá trình học các bạn không được dạy đâu, mà chỉ được các thầy cô giáo nhắc tới và sẽ được nhắc là về tự tìm hiểu mà lúc đấy mới tự tìm hiểu xong làm bài tập lớn thì thực sự là khó trừ khi có ai đó trong team gánh.

Ngoài ra, trong kì học bạn phải thực sự dành ra thời gian cho môn học, 1 ít thôi không cần nhiều đâu, chỉ là không bỏ bê là được. 


TOÀN BỘ TÀI LIỆU ĐỂ HỌC MÔN NÀY BẠN CÓ THỂ TẢI VỀ TẠI ĐÂY NHA

(sẽ bao gồm slide môn học, đề thi, các tài liệu, bài báo về học sâu, các ví dụ và 1 số bài lab để mọi người tham khảo)


BÀI TẬP LỚN

Môn này bạn sẽ phải làm một project về Deep Learning theo nhóm, ngoài ra bạn có thể chọn việc là review lại 1 paper nào đó ( cái này tùy thầy/ cô dạy nha). Các đề tài mà hay được chọn có thể như là: nhận diện biển số xe, thêm chú thích cho ảnh, dịch máy, ... Nếu như các bạn nghĩ đề tài mình đơn giản quá sợ không được điểm cao hay là quá phức tạp sợ không làm được có thể nhờ các thầy/ cô review qua về đề tài nha, các thầy/ cô luôn luôn sẵn lòng để trả lời các câu hỏi của các bạn đó.

9/02/2021

Nhập môn công nghệ phần mềm | Tài liệu, cơ sở ngành CNTT


Nhập môn công nghệ phân mềm, nghe tên chắc chắc các bạn sẽ liên tưởng tới việc học môn này sẽ được các thầy dạy về code 1 phần mềm như nào và rồi bài tập lớn sẽ được làm 1 project về tạo một phần mềm nào đó nghe cũng đã thấy thích rồi. Thực chất nếu ai suy nghĩ như trên thì chỉ đúng được 1 phần nhỏ thôi. Môn này chúng ta sẽ được học 1 quy trình đầy đủ để tạo ra 1 phần mềm gồm rất nhiều bước không chỉ riêng gì bước xây dựng phần mềm bằng các ngôn ngữ lập trình, chúng ta sẽ phải: 

  • Đặc tả yêu cầu, phân tích yêu cầu, thương lượng với khách hàng
  • Đặc tả chức năng, trạng thái,... bằng các biểu đồ như DFD, Use-case,...
  • Thiết kế UI
  • Xây dựng phần mềm
  • Kiểm thử

Nói chung thì rất là lý thuyết, nhàm chán nhưng cũng là những thứ mà mình nghĩ là nên biết chút ít để biết đường sau có thể còn tìm hiểu tài liệu trên Google, chứ nếu không biết gì thì sau còn không cả biết cách search như nào.

Ngoài ra khi làm bài tập lớn môn này các bạn phải làm quen với rất nhiều công nghệ như là git để quản lý mã nguồn hay là một số công cụ để mô hình hóa khác. Bài tập lớn môn này thì là các bạn sẽ phải làm một phần mềm nha, tùy vào thầy/ cô và tùy vào kì học thì yêu cầu sẽ khác nhau với từng kì nhưng sẽ giống nhau cho các lớp. Thường thì sẽ là các thầy sẽ cho trước đề tài và các bạn sẽ phải xây dưng phần mềm để đáp ứng yêu cầu đó, và nên nhớ là không chỉ code đâu nha, các bạn còn phải đặc tả, vẽ use-case, DFD,... các kiểu, xong rồi test,... Mình sẽ nói rõ hơn ở phần dưới nha.

Môn này bạn có thể học thầy Tuấn, thầy dạy thì đều đều giọng nên rất buồn ngủ, tuy nhiên thì thầy cho điểm khá thoáng, chấm bài tập lớn cũng khá thoáng nên điểm cũng rất cao. Còn thầy Nguyễn Nhất Hải các bạn cũng có thể cân nhắc, nhưng thầy Hải cho điểm khá chặt nên điểm không được cao cho lắm.

Môn này thì nói chung rất là phong phú, kiến thức để học phải nói là cực nhiều, ôn thi bạn nên ôn thi theo hướng dẫn của thầy/ cô giáo chứ để đọc lại slide mà nhớ hết để thi chắc khó, các bạn có thể tham khảo 1 số tài liệu của mình dưới đây nha: 

  • Slide bài giảng môn NM CNPM - thầy Nguyễn Mạnh Tuấn: TẢI VỀ SLIDE

BÀI TẬP LỚN

Mình muốn nói qua về phần bài tập lớn này thôi, các bạn có thể xem qua 1 báo cáo về bài tập lớn TẠI ĐÂY và các bạn cũng có thể thấy là chúng ta cần phải làm rất nhiều việc và mỗi việc không phải chỉ làm qua loa mà phải chi tiết để ghi lại trong báo cáo này. Mẫu báo cáo các bạn sẽ được cho sẵn nên yên tâm phần này.

Ví dụ về 1 bài tập lớn, các bạn sẽ được cho một ngữ cảnh về 1 khu dân phố nào đó và có 7 yêu cầu cần làm cho tổ dân phố đấ ví dụ như là: 

  • Quản lý thông tin sổ hộ khẩu
  • Quản lý thu phí, đóng góp
  • Quản lý sử dụng nhà văn hóa
  • Quản lý sinh hoạt, họp tổ dân phố 
  • Quản lý cấp phần thưởng
  • Quản lý thông tin phản ánh, kiến nghị 
  • Quản lý thông tin phòng tránh COVID-19

Với đề tài (1) - "Quản lý thông tin sổ hộ khẩu" thì các bạn đã được các thầy/ cô cung cấp đầy đủ từ 1 file báo cáo đầy đủ tới 1 sản phẩm được bằng App sử dụng Java Swing. Các bạn được quyền lựa chọn các đề tài từ (2) tới (7) và phát triển từ App mà các thầy/ cô đã cung cấp ( có thể là sửa đổi từ App của thầy/ cô giáo) hoặc các bạn có thể tự làm 1 App mới có thể trên nền tảng Web hoặc App bằng bất cứ ngôn ngữ gì bạn muốn nha. Tuy nhiên, như mình nói là không chỉ ra sản phẩm các bạn còn phải làm rất nhiều việc để có 1 quy trình tạo ra phần mềm hoàn chỉnh và bước xây dựng phân mềm chỉ là 1 bước nhỏ mà hầu hết các bạn sẽ tập chung vào nó dẫn tới chểnh mảng các phần khác.

Các bạn có thể xem danh sách các BÀI TẬP TUẦN ở đây nha, từng tuần các bạn sẽ có những task riêng để hoàn thành và nó chính là một phần trong bài tập lớn của các bạn, sau chỉ cần kết hợp lại thôi (Bài tập tuần 1 sẽ bao gồm cả đề tài để cả nhóm lựa chọn). 

Các bạn có thế lựa chọn công nghệ JavaFX cho sản phẩm của mình, nếu ai chưa biết có thể xem 1 bài chia sẻ của website về JavaFX TẠI ĐÂY nha.