Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add forward/backward pass, category, iterator, implementation #812

Merged
merged 5 commits into from Mar 2, 2020

Conversation

minhduc0711
Copy link
Contributor

Mình thêm mấy từ đang được thảo luận, mọi người cho ý kiến với nhé!

@thanhcsf thanhcsf added this to In progress in Glossary via automation Feb 27, 2020
@thanhcsf thanhcsf added this to the 03. Linear Neural Networks milestone Feb 27, 2020
glossary.md Outdated
@@ -147,10 +150,13 @@ Nếu bạn cho rằng một từ không nên dịch ra tiếng Việt, bạn c
## I
| English | Tiếng Việt | Thảo luận tại |
|----------------------------|--------------------|---------------|
| implement | xây dựng / lập trình | |

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
| implement | xây dựng / lập trình | |
| implement | triển khai | |

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bác @tanduong ở PR trước có nói, mình thấy đúng, là triển khai sẽ bị nhầm sang deploy, và bản thân từ triển khai cũng không sát nghĩa từ implement trong bối cảnh viết mã nữa.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nãy nhầm thread nên mình bê comment qua đây

@sudohainguyen: Mình thường dịch deploy là hiện thực hóa (tức từ code ra production), implement là triển khai (từ idea/pseudo sang code). Còn từ "xây dựng" dễ bị hiểu nhầm là build ấy.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mình thường dịch deploy là hiện thực hóa (tức từ code ra production), implement là triển khai (từ idea/pseudo sang code). Còn từ "xây dựng" dễ bị hiểu nhầm là build ấy.

@sudohainguyen bạn comment nhầm bên mình bưng lại qua đây thảo luận nhé :)).
Haha tiếng việt của mình với bạn hiểu cũng ngược nhau rồi. Mình hiểu 'hiện thực hoá' là từ ý tưởng -> code, triển khai là từ demo -> production.
'Xây dựng' ở đây hiểu bị hiểu nhầm sang build cũng không sao vì trong các ngữ cảnh implement function abc hiểu thành build/write function abc cũng đúng.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hoặc mình nghĩ từ này nên flexible theo context của câu, có thể sẽ liệt kê các nghĩa cho người dịch chọn 🤓

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mình trước giờ cũng nghĩ vậy nên trước giờ chưa đề xuất thêm từ này vào glossary. Tình hình bây giờ có vẻ nhiều bạn dịch chữ này nhiều kiểu hiểu khác nhau nên @minhduc0711 mới đề xuất.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mình khá chắc mọi người đều hiểu implement theo duy nhất một nghĩa thôi, là việc code một thuật toán/application. Vấn đề chỉ là mọi người đang dùng các từ khác nhau cho cùng một thứ.
Xây dựng nghe mang tính vĩ mô hơn (e.g. xây dựng phần mềm từ khâu thiết kế đến deploy), nên mình sẽ stick với lập trình.

glossary.md Outdated Show resolved Hide resolved
Copy link

@sudohainguyen sudohainguyen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mình có một vài góp ý như sau

glossary.md Outdated
| implicit feedback | phản hồi gián tiếp | |
| imputation (Preprocessing) | quy buộc | |
| independence assumption | giả định độc lập | |
| iteration | vòng lặp | |
| iterator | bộ duyệt | |

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mình nghĩ từ này không nên dịch sẽ tốt cho người đọc hơn

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mình lại không thấy lí do nào để không dịch cả.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@suhohainguyen Để tránh thảo luận lại từ đầu, từ này có thảo luận trong Slack, anh không biết em đã xem qua chưa nhỉ?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dạ em thấy trong slack thì tin nhắn gần nhất đề xuất giữ nguyên ấy ạ

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hơi liên quan, mọi người thử nghĩ iterable có dịch được không 🤔
Nếu không dịch được thì mình nghĩ nên để nguyên cả iterator.

Copy link
Member

@lkhphuc lkhphuc Feb 27, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Chữ iterable, iterator theo mình biết chưa có từ tiếng việt tương đương.
Hiện tại theo mình biết nó thì nó có 2 cách hiểu, đều ám chỉ việc lặp đi lặp lai một hành động,

  • thứ nhất trong toán tin, là lặp qua các phần tử trong một tập hợp, (set, array, dict, list)
  • thứ hai trong ngữ cảnh thông dụng là chạy lại từ kết quả của lần chạy trước đó (như kiểu recurrent). Cách hiểu này hay thấy trong cách dùng iteration design, iterate quickly through the development cycle, ...

Nếu cần thiết mình có thể chú thích cách dịch bộ duyệt trong ngữ cảnh lập trình thôi.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Việc dịch iteratorbộ duyệt thì mình thấy hoàn toàn hợp lý.

Mình chỉ đang nghĩ nếu sau này có từ iterable (khó dịch hơn) mà chẳng may phải để nguyên tiếng anh, thì lúc đó sẽ có 2 khái niệm liên quan chặt chẽ với nhau, nhưng có một từ thì được việt hóa, từ còn lại thì không, cảm giác cứ sai sai.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

iterator là danh từ. Dịch là bộ duyệt cũng khá sát.
iterable là tính từ chỉ collection có thể duyệt được, có thể tạm dịch là khả duyệt (nghe bệnh bệnh).

Bạn nào có thể trích một số ví dụ có chữ iterable không? Thường thì các tính từ kiểu này dùng cho các interface ở mức trừu tượng hơn một cấp so với danh từ (iterator). Nên nếu dịch, mình nên tìm cách sao cho diễn đạt được ý là nó trừu tượng hơn một cấp.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tanduong mình vừa ngó qua trong sách này thì có vẻ không có iterable rồi, nên chắc lý luận của mình cũng không thuyết phục lắm 😄
Cơ mà iterable lại là danh từ nhé, thế nên mình mới thấy dịch khó.

glossary.md Outdated
@@ -147,10 +150,13 @@ Nếu bạn cho rằng một từ không nên dịch ra tiếng Việt, bạn c
## I
| English | Tiếng Việt | Thảo luận tại |
|----------------------------|--------------------|---------------|
| implement | xây dựng / lập trình | |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bác @tanduong ở PR trước có nói, mình thấy đúng, là triển khai sẽ bị nhầm sang deploy, và bản thân từ triển khai cũng không sát nghĩa từ implement trong bối cảnh viết mã nữa.

glossary.md Outdated
| implicit feedback | phản hồi gián tiếp | |
| imputation (Preprocessing) | quy buộc | |
| independence assumption | giả định độc lập | |
| iteration | vòng lặp | |
| iterator | bộ duyệt | |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mình lại không thấy lí do nào để không dịch cả.

glossary.md Outdated Show resolved Hide resolved
glossary.md Outdated Show resolved Hide resolved
glossary.md Outdated Show resolved Hide resolved
@rootonchair
Copy link
Contributor

@minhduc0711 chắc thêm từ flatten vào đây để thảo luận luôn nhỉ. @tanduong có đề xuất là xé sợi

@thanhcsf
Copy link
Member

thanhcsf commented Mar 1, 2020

Thảo luận forward passbackward pass trên Slack

tanduong

Tại sao lại là forward passbackward pass chứ không phải right passleft pass hoặc là upward passdownward pass?

Mình nhớ có nghe cao nhân nào đó (hình như là Yann Lecun) nói là deep neural network lẽ ra nên gọi là wide neural network. Đơn giả là vì khi mình vẽ ra giấy thì nó rất chiếm chiều ngang. Nhìn nó rộng chứ không thấy sâu ở đâu cả.

Mình nghĩ việc đặt tên deep neural network, forward pass, backward pass xuất phát từ việc người viết đặt mình vào vị trí các nút đầu vào (input node). Nếu mình đứng ở phía các nút đầu vào và quay mặt về phía các đầu ra xem các tầng mạng là các bức tường thì rõ ràng đi từ đầu vào tới đầu ra là đi tới, đi từ đầu ra trờ lại đầu vào là đi lùi và mạng neuron có nhiều tầng là một mạng sâu. Càng nhiều tầng thì càng sâu. Đây là đứng trong không gian 3 chiều khác với không gian 2 chiều thể hiện được trên giấy.

Như vậy các chữ deep neural network, forward pass, backward pass là các chữ được định nghĩa dựa vào một góc nhìn cụ thể về mạng neuron. Đây là các định nghĩa mang tính tương đối. Và mình nghĩ đây không hẳn là góc nhìn tốt nhất. Vì khi suy luận, không gian 2 chiều dễ tưởng tượng hơn nhiều so với không gian 3 chiều.

Một ví dụ là chữ lan truyền ngược. Tại sao lại ngược? Nếu mình muốn xuôi thì có được không? Xin trả lời là không!

Lạ ha! Tại sao vậy? Vấn đề ở chỗ mình lan truyền cái gì. Lan truyền ngược là lan truyền lỗi từ các đầu ra đi về phía các đầu vào. Chỉ ở các đầu ra mình mới biết lỗi là bao nhiêu (lỗi cấp 1). Từ đó mới tính ra lỗi ở tầng trước đó (lỗi cấp 2) và lại từ đó tính ra ở tầng trước nữa. Muốn đi xuôi thì ở các đầu vào mình không có lỗi để lan truyền xuôi. Nên việc này là không thể. Nên chữ lan truyền ngược là lan truyền lỗi theo chiều ngược. Nhưng thật ra đó là chiều xuôi của lỗi đấy. Lan truyền lỗi chỉ lan truyền được theo một chiều ấy thôi.

Vì vậy mình nghĩ một cách dịch tốt hơn là hãy quên đi các phương hướng vì nó là một cách nhìn khá giới hạn. Cách tốt hơn là nhìn theo cái hành động thật sự làm gì.
forward pass là lan truyền đặc trưng (hay rộng hơn là tín hiệu).
backword pass là lan truyền lỗi.

Một điều mình sợ là các chữ không có nhiều ngữ nghĩa. Nếu phải phân biệt phải/trái, trước/sau, trên/dưới, loại 1/loại 2 thì cá nhân mình thấy rất sợ (như mấy cái type 1 error và type 2 error ấy, mình không nhớ được cái nào là cái nào nhưng false positivefalse negative thì nhớ được). Vậy nên nếu không phải phân biệt nữa thì vui sướng biết bao.

forward pass còn có thể nghĩ đơn giản là hành động make prediction.

Một điểm lưu ý là forward pass là một danh từ. pass forward mới là động từ. Chữ lan truyền xuôi nghe giống động từ hơn là danh từ. Nên nếu được mình làm sao cho nó giống danh từ hơn.

rootonchair

Đầu tiên thì khi gặp một từ cần dịch thì mình thường đi theo mind map bên dưới. Cụ thể là đầu tiên, từ này có phải là một từ thông thường hay là thuật ngữ khoa học? Nếu là thuật ngữ khoa học thì cần đầu tư nhiều thời gian để đạt đúng ngữ nghĩa. Từ này nếu thông thường thì có phổ biến không? Nếu có, dùng. Nếu không, từ này có thể dễ dàng infer qua từ tiếng Việt hay không? Nếu không thì có thể quả thêm thời gian hoặc giữ nguyên. i.e. gradient, epoch, framework. Nếu có, mình sẽ ưu tiên thời gian để giải quyết hơn là độ chính xác. Tuy nhiên cũng phải chính xác một cách tương đối, một "ổ" bánh mì thì không thể nào nói là "mẩu" được. Vì tính chất của các từ casual là sự đa nghĩa rất là cao, không giống như các thuật ngữ khoa học (ánh xạ 1-1) vì vậy nên đạt chính xác tuyệt đối là không thể, nếu có thể thì sẽ phải hi sinh bối cảnh.
translate_mind_map

Thì forward passbackward pass mình xem xét là thuộc loại trên, ví dụ như lan truyền lỗi của Tân sẽ cần phải xem lại khi bối cảnh là unsupervised learning i.e. Boltzmann Machine hay trong deep reinforcement learning khi thứ được truyền lại thực chất là gain chứ không phải loss. Vậy nên các từ này mình ủng hộ dịch là truyền xuôitruyền ngược ("truyền" khác "lan truyền").

Có một điều mình phải công nhận là mang phương hướng vào từ này không phải là ví dụ tốt. Bidirectional Recurrent Network chẳng hạn (xem đoạn giải thích Training ở dưới). Tuy nhiên ngôn ngữ là phạm trù thuộc xác suất hơn là logic, các bác trong NLP chắc rõ, nên mình xài nhiều người đọc cũng quen thôi. :"(

For forward pass, forward states and backward states are passed first, then output neurons are passed. For backward pass, output neurons are passed first, then forward states and backward states are passed next. After forward and backward passes are done, the weights are updated

Chủ trương hi sinh tính chính xác cho thời gian của mình có thể làm vài người khó chịu. Nhưng mình nghĩ đây là một project lớn và sẽ còn rất nhiều thứ cần phải lo (cách dịch Dropout chẳng hạn). Theo luật 70/30 thì chỉ 30% thứ ta chú tâm vào mới tạo ra 70% kết quả và đối với mình 30% đó là chất lượng bản dịch (dễ đọc, dễ hiểu) và tiến độ dự án không bị block quá nhiều làm nản các bạn nhận dịch.

tanduong

Mình thấy rootonchair nhận xét đúng về việc forward pass áp một cách đặt tên mà nhiều cái xung quanh sẽ được đặt tên theo ví dụ như forward states. Các bạn và anh chị có nhiều kinh nghiệm hơn có thể dẫn ra các ví dụ khác để chúng ta có cái nhìn rõ hơn về cái được và cái mất giữa các phương án dịch.
Mình nghĩ các task hiện tại vẫn có thể tiếp tục theo phương án giữ nguyên hoặc dùng chữ truyền xuôi để make progress. Vể sau ta có thế search & replace được. Nếu vậy việc dịch chữ này sẽ không phải là blocker.
Về việc các chữ được dùng không còn sát với ngữ nghĩa nhưng chữ đó vẫn tiếp tục được sử dụng (stick forever) trong literature thì cũng xảy ra nhiều. Một ví dụ là chữ reinforcement learning đấy. (cụ thể thế nào chắc mọi người tìm thêm)
Một việc cần suy nghĩ là contribution của chúng ta sẽ là gì nếu không dành thời gian nghĩ kỹ về cách dịch cách thuật ngữ quan trọng thế này? Và như Thanh Doan có nhận xét, nên để người sau biết được những điều chúng ta đã cân nhắc để từ đó làm tốt thêm lên.

rootonchair

Thường thì mình nghĩ nên dồn sức thảo luận về những thuật ngữ quan trọng, mình thường đo mức quan trọng của các từ chủ yếu ở việc từ đó có nằm trên Wiki không. Nếu có thì đó sẽ là những contribute lớn (rất lớn) trong deep learning ở VN. Bạn nên cân nhắc về việc này

Tiep Vu

Mình chợt thấy lượt truyền xuôilượt truyền ngược khá hợp lý trong trường hợp này. Từ lượt dịch từ pass là một từ quan trọng không nên bỏ. Nếu đặt trong câu văn:

In forward pass, ....
In backward pass, ...

thì sẽ thấy không thể bỏ từ lượt được.

Từ lan truyền lỗi đúng trong một số trường hợp nhưng lại thiếu ý trong nhiều trường hợp khác. Một là cụm này không nói rõ hướng tính toán, hai là cái được lan truyền không nhất thiết là lỗi.

Nếu trong cuối tuần này mình không thống nhất được các từ này thì nên giữ lại bản tiếng Anh, khi nào cần có thể search and replace. Không nên dịch thành một từ/cụm từ chưa hoàn chỉnh về ngữ nghĩa.

@thanhcsf
Copy link
Member

thanhcsf commented Mar 1, 2020

Thảo luận về gradient trên Slack

tanduong

Mình thấy gradient dịchđạo hàm hợp lý đấy. Lúc mình học giải tích thầy có hỏi hàm nhiều biến thì các em đạo hàm thế nào? Và câu trả lời là đạo hàm theo từng biến và cái đạo hàm là một vector gọi là gradient.

Quang Nhat

Do từ derivative cũng mang nghĩa đạo hàm và được sử dụng nhiều trong sách, mình vẫn nghĩ là nên giữ nguyên gradient để tránh nhầm lẫn.

tanduong

thử phân biệt derivativegradient của hàm nhiều biến xem 🙂

Tiep Vu

Tân cẩn thận, từ gradient trong nhiều sách tiếng Việt cũng được giữ nguyên và có nghĩa độc lập với đạo hàm. Hai khái niệm này chỉ giống nhau khi xét ở hàm 1 biến, nhưng nhiều biến thì lại không có khái niệm derivative. Chỗ này giống như scalarvector vậy.

@lkhphuc
Copy link
Member

lkhphuc commented Mar 1, 2020

Từ forward/backward pass mình đồng ý với @rootonchair, mình xem cặp này thuộc dạng thuật ngữ chợ búa, nên việc forward/backward pass có diễn tả đúng tính chất vấn đề không nằm ngoài phạm vi dự án (nhưng đoạn phân tích của @tanduong rất đúng, và vấn đề này rất thường xuyên xảy ra. Lâu lâu các bác trên Twitter lại cãi nhau ầm ĩ, gần đây có cãi nhau What is even a Layer? hay What is and is not Deep Learning?).

Trong phạm vi dự án, để dịch những từ phổ thông này thì yếu tố mình thấy quan trọng là phải giữ được khả năng so sánh, nhận ra mối liên kết của các thuật ngữ. Theo tiêu chí này thì mình thấy lượt truyền xuôi/ngược là hợp nhất rồi, chỉ còn lăn tăn về tính đúng đắn của thuật ngữ này trong tiếng anh để xem có nên dịch hay không thôi.
Tạm thời mọi người lại quay lại cách cũ, cho một vote Dịch 👍 hay Không dịch ❤️ nhé.

@minhduc0711
Copy link
Contributor Author

@rootonchair để mình mở cái PR nữa, close cái này cho đỡ block các PR dịch khác

@tiepvupsu
Copy link
Collaborator

@rootonchair để mình mở cái PR nữa, close cái này cho đỡ block các PR dịch khác

Đúng rồi, mấy từ khó không nên dồn vào một PR, một cái bị blocked là các từ khác phải chờ theo.

@minhduc0711
Copy link
Contributor Author

Tạm thời để thế này vậy, mọi người approve nhé

@thanhcsf thanhcsf merged commit bfa6da0 into master Mar 2, 2020
Glossary automation moved this from In progress to Done Mar 2, 2020
@thanhcsf thanhcsf deleted the glossary-feb27-duc branch March 2, 2020 02:54
@lkhphuc
Copy link
Member

lkhphuc commented Mar 2, 2020

@minhduc0711 ơ giờ check lại mới thấy sao iterator lại giữ nguyên thía? Mình thấy ý kiến cuối cùng của từ này là dịch bộ duyệt mà nhỉ? Hay là mình bỏ lỡ điều gì?

@thanhcsf
Copy link
Member

thanhcsf commented Mar 2, 2020

@lkhphuc Tình hình là cái này chốt vote trên Slack với tỉ số 4-2 nghiêng về đội giữ nguyên.

@minhduc0711
Copy link
Contributor Author

chắc tin nhắn trôi nhanh quá, sau phải bê lên đây vote vậy

@lkhphuc
Copy link
Member

lkhphuc commented Mar 2, 2020

À, tại mình chưa lên slack :)) sorry mọi người.

@minhduc0711 minhduc0711 changed the title Add forward/backward pass, category, iterator... Add forward/backward pass, category, iterator, implementation Mar 14, 2020
@minhduc0711 minhduc0711 mentioned this pull request Jun 10, 2020
7 tasks
@Khiem179
Copy link

Mình tìm được một đoạn trên wiki về derivative và gradient "at each point, the derivative is a cotangent vector, a linear form (covector) which expresses how much the (scalar) output changes for a given infinitesimal change in (vector) input, while at each point, the gradient is a tangent vector, which represents an infinitesimal change in (vector) input." tại địa chỉ wiki https://en.wikipedia.org/wiki/Gradient#Gradient_and_the_derivative_or_differential. Bản thân mình ủng hộ việc dịch từ gradient thành đạo hàm hơn là để nguyên.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
No open projects
Glossary
  
Done
Development

Successfully merging this pull request may close these issues.

None yet

8 participants