Checklist cho luận văn thạc sĩ

Checklist cho luận văn thạc sĩ (Cho các sinh viên đang viết luận văn thạc sĩ)

  1. Có thực hiện lại được không? (Reproducibility). Để thực hiện lại được, nên cố gắng đóng gói chương trình sao cho với mỗi kết quả trong luận văn thạc sĩ, chỉ cần chạy một script duy nhất để tái hiện lại được các kết quả từ dữ liệu thô. Ngay cả các bảng số liệu, hình vẽ cũng nên sinh ra bằng chương trình máy tính.
  2. Có tính mới mẻ không? (Novelty). Có tính mới mẻ về mặt khoa học là yêu cầu dành cho những luận văn thạc sĩ xuất sắc. Nhưng luận văn thạc sĩ cũng nên cũng có tính mới về mặt thực hành.
  3. Đã chỉnh sửa lại nhiều lần chưa? Không chỉ tự mình chỉnh sửa mà nên nhờ thầy hướng dẫn và nhiều người khác mà mình tin cậy đọc và chỉnh sửa giúp.
  4. Đã hiểu rõ các nghiên cứu trước chưa?
  5. Tự bạn đánh giá xem mình có đủ điều kiện tốt nghiệp thạc sĩ chưa?

Bài viết dựa trên nguồn tiếng Nhật: 【卒論修論のさしすせそ】https://twitter.com/nh_m_/status/423322673993633792
さ:再現性あるの
し:新規性あるの
す:推敲は何度もしましたか
せ:先行研究ちゃんと理解してるの
そ:卒業できると思ってるの
#noted #teaching

Advertisements

Cài đặt Theano, TensorFlow và Keras cho Deep Learning

1. Giới thiệu

Bài viết hướng dẫn cách cài đặt Theano, TensorFlow và Keras cho Deep Learning.

2. Bước 1: Cài đặt Anaconda

Anaconda là một bản phân phối miễn phí cho Python. Tải bản Anaconda phù hợp với HĐH của bạn tại đây. Sau đó cài đặt theo hướng dẫn.

3. Cài đặt Theano với conda

conda install Theano

Xem hướng dẫn cài đặt Theano tại đây.

4. Cài đặt Keras

Cài đặt Keras bằng lệnh

conda install keras

Với python 2, dùng pip

pip install keras

Mặc định lệnh này sẽ cài đặt luôn backend tensorflow.

Bạn có thay đổi backend TensorFlow thành Theano bằng cách thay đổi file cấu hình ~/.keras/keras.json. Xem hướng dẫn tại đây.

Tạo hình vẽ/diagram và chuyển định dạng file từ pdf sang eps trên Mac OS X

Update: Ngoài cách dưới đây, có thể dùng TikZ  GIMP để vẽ hình và chuyển định dạng file.

Khi cần đưa hình vẽ vào LaTeX, mình hay sử dụng định dạng .eps và package graphicx.

Trong LaTeX sẽ chèn hình vẽ (chẳng hạn img.eps) vào một file LaTeX như sau.

\usepackage[dvips]{graphicx}
\begin{figure}[!t]
\begin{center}
\includegraphics[width=0.4\textwidth]{draw/img.eps}
\caption{System architecture}
\end{center}
\end{figure}

Trên Windows, để vẽ hình/diagram mình hay dùng Visio, sau đó in ra thành ps, dùng Adobe Acrobat để chuyển thành eps, và sau đó dùng epstool để sửa lại bounding box.

Trên máy Mac, sau một hồi mày mò mình đã tìm ra cách để thực hiện các bước ở trên. Đó là dùng công cụ Drawing của LibreOffice để vẽ hình, export ra pdf, dùng pdfcrop để crop file pdf tạo ra sau đó dùng xpdf để chuyển file pdf đã crop thành file eps. Được cái tất cả các phần mềm trên đều miễn phí nên không lo nguy cơ bảo mật trong các bản crack.

Các bước thực hiện như sau. Các bước dưới đây giả định bạn đã cài đặt MacTeX trên Mac OS X.

    1. Step 1: Download và cài đặt LibreOffice tại: https://www.libreoffice.org
    2. Step 2: Mở LibreOffice và dùng Drawing để vẽ hình. Drawing trong LibreOffice hỗ trợ vẽ diagram và flowchart khá tốt dù không xịn như Microsoft Visio.
    3. Step 3: Lưu bản drawing trong LibreOffice dưới định dạng pdf, ví dụ img.pdf
    4. Step 4: Sử dụng lệnh pdfcrop để crop file pdf vừa tạo ra
       pdfcrop img.pdf

      Lệnh này sẽ tạo ra file img-crop.pdf trong cùng thư mục với img.pdf

    5. Step 5: Download xpdf tại: http://www.foolabs.com/xpdf/download.html
    6. Step 6: Giải nén file: xpdfbin-mac-3.04.tar.gz
       tar xvfz xpdfbin-mac-3.04.tar.gz
    7. Step 7: Copy các file trong thư mục xpdfbin-mac-3.04/bin64  vào /usr/local/bin. Để copy được có thể bạn cần quyền root.
    8. Step 8: Chuyển file img-crop.pdf sang định dạng eps
       pdftops -eps img-crop.pdf

      Lệnh này sẽ tạo ra file img-crop.eps. Bạn có thể đổi tên file thành img.eps nếu thích.

Sau các bước thực hiện trên, bạn có thể đưa file ảnh .eps vào trong LaTeX một cách dễ dàng mà không cần quan tâm đến bounding box.

Đức hạnh của Benjamin Franklin

Nguồn: Wikipedia

Franklin đã hoàn thiện nhân cách bằng một kế hoạch gồm mười ba đức tính, mà ông đã khởi đầu theo đuổi từ tuổi 20 (năm 1726) và vẫn tiếp tục theo đuổi tới tận cuối cuộc đời. Trong tự truyện của mình (xem phần tham khảo dưới đây) ông đã liệt kê mười ba đức tính:

  1. Chừng mực. Ăn không tới chán; uống không quá nhiều.”
  2. Yên lặng. Chỉ nói những điều mang lại lợi ích cho bạn và người khác; tránh những cuộc cà kê mất thì giờ.”
  3. Trật tự. Hãy để mọi thứ của bạn đều có vị trí của chúng; hãy để mỗi phần công việc của bạn đều được thu xếp một khoảng thời gian.”
  4. Kiên định. Quyết tâm làm điều bạn phải làm; làm bằng được điều bạn quyết tâm.”
  5. Tiết kiệm. Không chi gì ngoài những thứ tốt cho bạn và người khác; ví dụ, không nên lãng phí thứ gì.”
  6. Siêng năng. Không nên bỏ phí thời gian; luôn sử dụng chúng một cách hiệu quả; bỏ mọi hành động không cần thiết.”
  7. Chân thật. Không nên lừa dối; hãy suy nghĩ một cách ngay thẳng và thành thật, và, nếu bạn nói, hãy nói điều bạn biết.”
  8. Công bằng chính trực. Không làm hại người khác, giúp đỡ người khác là bổn phận của bản thân.”
  9. Điều độ. Tránh những sự thái quá; cố chịu đựng tới mức bạn cho là đủ.”
  10. Sạch sẽ. Không nên để sự không sạch sẽ hiện diện trên thân thể, quần áo hay nơi ở của bạn.”
  11. Yên bình. Không nên quan tâm tới những điều vặt vãnh, hay những rủi ro thông thường hoặc không tránh được.”
  12. Trinh tiết. Điều tiết sinh dục, đừng để làm tổn hại thân thể của mình hoặc an ninh hay danh dự của người khác.”
  13. Khiêm tốn. Học theo Jesus và Socrates.”

Continue reading

Mastering Programming

Dịch từ bài viết “Mastering Programming” của tác giả Kent Beck.

Qua nhiều năm quan sát những lập trình viên bậc thầy, tôi đã nhận thấy những mô thức chung trong quy trình làm việc của họ. Qua nhiều năm huấn luyện những lập trình viên ở mức thạo nghề, tôi đã nhận thấy sự thiếu vắng những mô thức đó. Tôi đã thấy sự khác biệt (mà) khởi đầu cho những mô thức đó, có thể tạo ra.

Đây là những cách thức mà những lập trình thu được hiệu quả tốt nhất có thể từ hơn 3 tỉ giây quý báu của họ ở trên trái đất này (ý nói là thời gian trong 1 năm – lời người dịch).
Bài luận này sẽ làm bạn sáng tỏ hơn về những điều đó. Một “công nhân thạo nghề” học cách giải quyết những vấn đề lớn hơn bằng cách cùng một lúc giải quyết nhiều vấn đề hơn. Một bậc thầy học cách giải quyết những vấn đề còn lớn hơn thế bằng cách giải quyết ít vấn đề hơn cùng một lúc. Các phần của lời khuyên này sẽ được chia nhỏ sao cho việc tích hợp những giải pháp riêng biệt sẽ là một vấn đề nhỏ hơn việc chỉ giải quyết chúng đồng thời.

Thời gian

  • Phân chia. Lấy một dự án lớn, cắt nó thành các phần nhỏ, và sắp xếp lại các phần sao cho phù hợp với hoàn cảnh. Tôi luôn có thể phân chia các dự án nhỏ hơn và luôn tìm thấy những cách thay đổi trật tự của các phần mà phù hợp với các nhu cầu khác nhau.
  • Một việc tại một thời điểm. Chúng ta tập trung vào tính hiệu quả đến mức chúng ta giảm số lượng số vòng phản hồi (feedback cycles) trong một nỗ lực để giảm tổng chi phí. Điều này dẫn đến những tình trạng gỡ lỗi phức tạp mà chi phí của nó có thể còn lớn hơn tổng phí về số vòng phản hồi mà chúng ta đã tránh.
  • Viết chương trình chạy được, chạy đúng, và chạy nhanh (Make it run, make it right, make it fast). (Ví dụ của một việc tại một thời điểm, phân chia công việc, và dễ dàng sửa đổi).
  • Những sửa đổi dễ dàng. Khi bạn phải đối mặt với một sự thay đổi phức tạp, đầu tiên hãy làm cho nó dễ đi (tôi cảnh báo rằng điều này có khó), sau đó thực hiện việc sửa đổi dễ (ví dụ: phân chia công việc, làm một việc tại một thời điểm, tập trung, và sự cô lập. Đây là một ví dụ của việc phân chia công việc.
  • Sự tập trung. Nếu bạn cần thay đổi một vài thành phần, đầu tiên hãy sắp xếp lại mã chương trình sao cho sự thay đổi chỉ cần xảy ra trong một thành phần.
  • Sự cô lập. Nếu bạn chỉ cần thay đổi một phần của một thành tố, hãy trích xuất thành tố đó ra để thay đổi trên toàn bộ thành tố con đó.
  • Quản lý các hệ thống cơ sở. Bắt đầu các dự án bằng việc so sánh với những hệ thống đã có. Điều này có thể chống lại thiên hướng muốn bắt đầu sửa chữa mọi thứ của chúng ta, nhưng khi bạn xem xét các hệ thống cơ sở, bạn sẽ thực sự biết liệu có đúng là bạn đang làm công việc sửa chữa những thứ hiện có không.

Học tập

  • Trước khi thực thi chương trình, dự đoán chính xác điều gì sẽ xảy ra.
  • Các giả thuyết cụ thể. Khi chương trình hoạt động không đúng, hãy minh định những gì bạn cho là sai trong chương trình trước khi thực hiện sự thay đổi. Nếu bạn có hai hay nhiều hơn các giả thuyết, hãy phân tích sự khác biệt giữa các giả thuyết đó.
  • Loại bỏ chi tiết không liên quan. Khi báo cáo một lỗi, hãy tìm những bước ngắn nhất để sinh lại lỗi đó. Khi cô lập một lỗi, hãy tìm những ví dụ (test case) ngắn nhất. Khi sử dụng một API mới, bắt đầu từ những ví dụ đơn giản nhất. “Tất cả những thứ này không thành vấn đề” là một giả thuyết quá mạnh và có khi là sai lầm.
    • Ví dụ, hãy xem một lỗi trên mobile, sinh lại nó với chương trình curl.
  • Đa quy mô. Di chuyển tự do giữa các quy mô (ví dụ khi thực thi trên dữ liệu nhỏ sang thực thi trên dữ liệu lớn — cách hiểu của người dịch). Có thể đây là một vấn đề thiết kế, không phải là vấn đề kiểm thử. Có thể vấn đề này liên quan đến con người chứ không phải là một vấn đề công nghệ [Lừa đảo, điều này luôn đúng].

Những thứ vượt trên cả logic

  • Tính đối xứng. Những thứ gần như nhau có thể phân chia chia thành những phần giống hệt nhau và những phần khác biệt rõ ràng.
  • Tính thẩm mỹ.
  • Nhịp điệu. Chờ đợi cho đến thời điểm đúng bảo toàn năng lượng và tránh sự lộn xộn.
  • Cân bằng (tradeoffs). Tất cả những quyết định là chủ đề của việc tradeoff. Quan trọng hơn là biết quyết định phụ thuộc vào cái gì hơn là biết câu trả lời bạn lựa chọn hôm nay (hoặc câu trả lời này bạn đã lựa chọn hôm qua).
  • Danh sách niềm vui (Fun list). Khi các ý tưởng không thứ tự đến, hãy ghi chép chúng và quay trở lại làm việc nhanh chóng. Xem lại danh sách khi bạn tạm dừng.
  • Chăm sóc các ý tưởng. Các ý tưởng giống như là những chú chim nhỏ dễ sợ hại. Nếu bạn doạ chúng đi, chúng sẽ dừng việc đến với bạn. Khi bạn có một ý tưởng, hãy chăm chút nó một chút. Kiểm chứng để loại bỏ chúng nhanh nhất có thể, nhưng từ dữ liệu chứ không phải là từ sự thiếu sự say mê.
  • Nguyên tắc 80/15/5. Sử dụng 80% thời gian của bạn cho những công việc nguy cơ thấp hoặc những công việc được trả lương vừa phải. Sử dụng 15% thời gian của bạn cho các việc nguy cơ cao/trả lương cao có liên quan. Sử dụng 5% thời gian của bạn cho những việc làm cho bạn thích thú, không quan tâm tới kết quả. Hãy dạy những người tiếp nối bạn làm 80% công việc của bạn. Vào thời gian ai đó sẵn sàng để đảm nhận công việc, một trong số 15% thí nghiệm của bạn (hoặc ít thường xuyên hơn, một trong số 5% thí nghiệm) sẽ cho kết quả và trở thành phần 80% của bạn. Lặp lại điều đó.

Kết luận

Dòng chảy trong trong bản phác thảo này dường như bắt đầu từ việc giảm nguy cơ bằng việc quản lý thời gian đến việc chấp nhận mạo hiểm một cách có ý thức bằng cách sử dụng toàn bộ não bộ và nhanh chóng quyết định độ ưu tiên của các ý tưởng.

Thiết lập môi trường làm việc cơ bản trên Mac OS X

Mình chủ yếu làm việc trên môi trường Mac OS X. Hệ điều hành hiện tài trên máy Macbook Pro của mình là El Capitan 10.11.6. Các tác vụ cơ bản là lập trình với các ngôn ngữ mã nguồn mở như Python, Perl, Ruby, R, etc, soạn thảo trên emacs, chạy các chương trình trên Terminal, soạn thảo tài liệu với LaTeX. Bài viết này sẽ tóm tắt lại các thiết lập cơ bản để làm việc trên môi trường này các yêu cầu nêu trên.

1- Thiết lập tên máy tính

sudo scutil --set HostName logos

Tham khảo: http://bit.ly/2aoUSF5

Thay đổi tên local để tránh hiện tượng emacs khởi động chậm.

sudo scutil --set HostName logos.local

2- Thiết lập con trỏ trên Terminal

Thêm dòng sau đây vào file .bashrc

PS1='[\u@\h \w]\n$ '

Thêm dòng sau vào file .bash_profile

if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

3- Thiết lập các alias cho các lệnh hay dùng

# Xoá màn hình với lệnh cls
alias cls=clear

4- Cài đặt Git

Để cài đặt Git trên máy Mac, chỉ cần gõ lệnh git trên terminal và một hộp thoại hiện lên sẽ hướng dẫn bạn cách cài đặt (http://bit.ly/1WQ50nb)

5- Cài đặt Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Tham khảo: http://brew.sh/

6- Cài đặt môi trường làm việc Python (với anaconda)

https://www.continuum.io/downloads

Xem thêm thiết lập môi trường Python với conda tại đây

7- Đổi lại phím tắt Ctrl-Space trên Mac OS X El Capitan

Mình hay dùng phím tắt Ctrl-Space để đánh dấu khi soạn thảo với emacs nhưng trong OS X 10.11 (El Capitan), phím tắt này được dùng để thay đổi input sources. Để đổi lại bạn vào System Preferences – Keyboard – Shortcuts; vào Spotlight, bỏ chọn Show Spotlight Search, sau đó vào lại Input sources để đổi phím tắt thành command-Space.

Tham khảo: http://stackoverflow.com/questions/32932036/change-input-source-shorcut-for-mac-os-el-capitan

Chú ý khi thay chọn mục cần thay đổi, ấn phím tab sau đó ấn tổ hợp phím muốn thay đổi.

8- Remap Ctrl-a trong GNU Screen thành Ctrl-o

Mình hay dùng emacs để soạn và Ctrl-a trong emacs được dùng để di chuyển con trỏ đến đầu mỗi dòng. Trong GNU Screen, Ctrl-a được dùng như tổ hợp phím điều khiển.

Để thay đổi, thêm dòng sau vào file ~/.screenrc

escape ^oo

Tham khảo: http://www.vineetmanohar.com/2012/02/2-ways-to-change-key-binding-in-screen/

9- Cài đặt Texmaker cho Mac OS X

Mình hay sử dụng Texmaker để soạn thảo LaTeX trên Mac OS X.

Download và cài đặt Texmaker tại đây.

10- Cài đặt môi trường soạn thảo LaTeX

Xem tại đây: http://www.howtotex.com/howto/installing-latex-on-mac-os-x/

11- Dùng phím Option (Alt) như Meta key khi dùng terminal

Mục đích: Để các key-binding trong các trình soạn thảo như Emacs/Vim hoạt động chính xác. Vào Preference/Keyboard của Terminal và chọn mục “Use Option as Meta Key”. Continue reading

Cơ bản về tranh luận

Về cơ bản, trong mọi lĩnh vực của cuộc sống, con người luôn có những cách nhìn khác nhau (view point) về cùng một vấn đề. Các cuộc tranh luận thường xảy ra khi khi các quan điểm, cách nhìn rất khác nhau, thậm chí đối lập. Bài Note này nhằm mục đích tóm tắt lại những gì mình học được trên Internet về các kiến thức cơ bản về “Tranh luận”. (Debate)

1- Thế nào là tranh luận (Debate)

Về cơ bản, tranh luận là việc 2 người hoặc 2 nhóm người (có thể nhiều, nhưng thường là hai) dùng các lập luận, dẫn chứng để bảo vệ một quan điểm, cách nhìn (trong 1 vấn đề cụ thể) mà mình tin là đúng. Quan điểm, cách nhìn của hai bên thường là đối lập. Ví dụ, một bên ủng hộ cho đốt pháo trở lại, bên kia thì phản đối.

Cần phân biệt “tranh luận” với “cãi vã”. Trong cãi vã, người ta hay dùng các thủ đoạn như “chỉ trích cá nhân”, “nói to”, thậm chí “văng tục chửi bậy” thay vì đưa ra lý lẽ.

Cũng nên phân biệt giữa “tranh luận” với “thảo luận”. Một cuộc thảo luận có thể có những cuộc tranh luận nhỏ, nhưng mục đích của thảo luận thường là để hướng tới một giải pháp, ý tưởng tốt hơn. Tranh luận thì ngược lại, mục đích chính là chiến thắng, để thuyết phục người nghe (đọc) rằng quan điểm của mình là đúng, hợp lý hoặc phủ định quan điểm của đối phương.

2- Chủ đề tranh luận

Một cuộc tranh luận thường xoay quanh một quan điểm nhất định. Các chủ đề thường gặp nhất là các vấn đề xã hội. Các chủ đề tranh luận thường hay có cụm từ “có nên” (should), “A tốt hơn B”, “A hợp lý hơn B”. Trong quá trình tranh luận, có thể các chủ đề nhỏ hơn liên quan, nhưng nội dung chính của tranh luận nhất thiết phải là topic được chọn ban đầu.

Chủ đề được chọn để tranh luận nên phù hợp với độ tuổi và giáo dục của những người tham gia. Ví dụ không nên tranh luận chủ đề “Có nên hợp pháp hoá mại dâm” với trẻ em (mặc dù có ngoại lệ với một số trẻ em hiểu biết trước tuổi).

Có hai nhóm khác (sides) khác nhau với một quan điểm, chính sách: nhóm ủng hộ (AFFIRMATIVE hoặc “Chính phủ” trong các cuộc họp quốc hội), nhóm phản đối (NEGATIVE, hoặc “Đối lập”).

3- Định nghĩa chủ đề tranh luận

Trước khi tranh luận về một quan điểm nào đó, hai nhóm tham gia cần phải thống nhất với nhau về định nghĩa của các khái niệm trong chủ đề tranh luận. Định nghĩa ở đây không chỉ mang nghĩa là định nghĩa của các từ riêng lẻ trong chủ đề mà còn là toàn bộ chủ đề. Ví dụ chủ đề “Có nên cho đốt pháo trở lại” là có ý nghĩa nhưng chủ đề “Cải bắp tốt hơn hoa hồng” lại không có chút ý nghĩa gì.

Nếu hai nhóm chưa thống nhất được định nghĩa của các khái niệm trong chủ đề tranh luận, nhóm phản đối cần đưa ra ý kiến để nhóm ủng hộ làm rõ hơn để đi tới thống nhất.

4- Lập luận (argument)

  • Các lập luận được đưa ra nhằm hỗ trợ cho quan điểm mà mình ủng hộ.
  • Các lập luận phải có dẫn chứng và các dẫn chứng cần chính xác và có thể kiểm chứng tính chính xác một cách trực tiếp hoặc gián tiếp.

5- Cần tránh trong tranh luận

  • Đả kích cá nhân/tập thể người tham gia tranh luận: Người tranh luận quá xấu xí, béo, gầy, đời tư không liên quan đến chủ đề tranh luận. Đưa ra đả kích cá nhân sẽ làm mất điểm của mình/nhóm mình trong tranh luận. Xem một số sự kiện, có thể thấy ví dụ của việc đả kích cá nhân như khai thác đời tư, quan hệ họ hàng, làng xóm, etc để hạ thấp đối tượng và làm cho người nghe/xem xao lãng chủ đề chính.
  • Thiếu dẫn chứng hoặc dẫn chứng thiếu thuyết phục: Một lý lẽ đưa ra là thiếu thuyết phục nếu thiếu đi các dẫn chứng phù hợp, chính xác.
  • Chỉ dựa lập luận của đối phương để đối đáp. Dẫn chứng từng lời nói của đối phương để phản đối, hoặc dựa chủ yếu vào các lập luận của đối phương là không đủ và không tốt đối với một cuộc tranh luận. Người tranh luận cần phải đưa ra được các lập luận của riêng mình để bảo vệ cho quan điểm của mình.
  • Đánh tráo khái niệm: Đối phương dùng một định nghĩa khác cho khái niệm được đưa ra trong chủ đề tranh luận nhằm giành lợi thế. Gặp tình huống như thế này, cần đặt câu hỏi để làm rõ định nghĩa của khái niệm mà đối phương đề cập.
  • Nhét chữ vào mồm: Đối phương gán cho mình những điều mình không nói/đề cập tới trong các lập luận của mình và dựa vào đó để phản bác.

6- Một số phương pháp tranh luận

(Mới tìm hiểu được 1 phương pháp)

Phương pháp Socrates (Socratic Method)

Sử dụng chuỗi các câu hỏi khác nhau nhằm khiến người tranh luận đồng ý với một quan điểm đối lập với quan điểm ban đầu của họ, qua đó chứng tỏ quan điểm của đối phương là sai hoặc ít nhất là thiếu chính xác. Nghệ thuật của phương pháp nằm ở trong cách đặt câu hỏi cho đối phương, tấn công vào các giả sử (assumption) mà đối phương sử dụng khi đưa ra câu trả lời, đưa ra phản ví dụ.

Tham khảo:

  1. http://www.wikihow.com/Argue-Using-the-Socratic-Method
  2. http://www.niu.edu/~jdye/method.html