Helpex - Trao đổi & giúp đỡ Đăng nhập

TensorFlow vs PyTorch vs Keras cho NLP

Trước khi bắt đầu so sánh tính năng giữa TensorFlow, PyTorch và Keras, chúng ta hãy xem xét một số khác biệt nhẹ nhàng, không mang tính cạnh tranh giữa chúng.

Sự thật không cạnh tranh

Dưới đây, chúng tôi trình bày một số điểm khác biệt giữa 3 công cụ này sẽ được dùng làm phần giới thiệu về TensorFlow, PyTorch và Keras. Những điểm khác biệt này không được viết trên tinh thần so sánh cái này với cái kia mà với tinh thần giới thiệu chủ đề thảo luận của chúng tôi trong bài viết này.

TensorFlow

  • Tạo bởi Google
  • Phiên bản 1.0 vào tháng 2 năm 2017

PyTorch

  • Tạo bởi Facebook
  • Phiên bản 1.0 vào tháng 10 năm 2018
  • Dựa trên Torch, một khung học sâu khác dựa trên Lua

Keras

  • API cấp cao để đơn giản hóa sự phức tạp của các khung học sâu
  • Chạy trên các API học sâu khác - TensorFlow, Theano và CNTK
  • Nó không phải là một thư viện của riêng nó

Sự khác biệt cạnh tranh của TensorFlow, PyTorch và Keras

Bây giờ chúng ta hãy xem sự thật cạnh tranh hơn về 3 trong số họ. Chúng tôi đặc biệt đang tìm cách phân tích so sánh các khuôn khổ tập trung vào Xử lý ngôn ngữ tự nhiên .

1. Các loại RNN có sẵn

Khi tìm kiếm giải pháp học sâu cho một vấn đề NLP, Mạng thần kinh tái tạo (RNN) là kiến ​​trúc phổ biến nhất cho các nhà phát triển. Do đó, sẽ rất hợp lý khi so sánh các khuôn khổ từ góc độ này.

Tất cả các khung công tác đang được xem xét đều có các mô-đun cho phép chúng tôi tạo các RNN đơn giản cũng như các biến thể cải tiến hơn của chúng - Mạng đơn vị định kỳ Gated ( GRU ) và mạng Bộ nhớ ngắn hạn dài ( LSTM ).

PyTorch

PyTorch cung cấp 2 cấp độ lớp để xây dựng các mạng lặp lại như vậy:

  • Các lớp nhiều lớp - nn.RNN, nn.GRUnn.LSTM. Các đối tượng của các lớp này có khả năng đại diện cho các mạng thần kinh tái phát hai chiều sâu.
  • Các lớp cấp độ ô - nn.RNNCell, nn.GRUCellnn.LSTMCell. Các đối tượng của các lớp này chỉ có thể đại diện cho một ô duy nhất ( một lần nữa, một ô RNN hoặc LSTM hoặc GRU đơn giản ) có thể xử lý một bước thời gian của dữ liệu đầu vào.

Vì vậy, các lớp nhiều lớp giống như một lớp bao bọc tốt đẹp cho các lớp cấp độ tế bào trong những thời điểm chúng ta không muốn tùy chỉnh nhiều trong mạng nơ-ron của mình.

Ngoài ra, việc tạo một RNN hai chiều cũng đơn giản như đặt đối số hai chiều thành True trong các lớp nhiều lớp!

TensorFlow

TensorFlow cung cấp cho chúng tôi mô-đun tf.nn.rnn_cell để giúp chúng tôi đáp ứng các nhu cầu RNN tiêu chuẩn của mình.

Một số lớp quan trọng nhất trong tf.nn.rnn_cellmô-đun như sau:

  • Lớp học cấp độ tế bào  được sử dụng để xác định một tế bào duy nhất của RNN, tức - BasicRNNCell, GRUCellvà LSTMCell
  • Lớp MultiRNNCell  được sử dụng để xếp chồng các ô khác nhau để tạo RNN sâu
  • Lớp DropoutWrapper  được sử dụng để thực hiện quy định về việc bỏ học

Keras

Dưới đây là các lớp lặp lại được cung cấp trong thư viện Keras. Một số lớp này là:

  • SimpleRNN - RNN được kết nối đầy đủ nơi đầu ra sẽ được đưa trở lại đầu vào
  • GRU - Lớp đơn vị hồi quy định mức
  • LSTM - Lớp bộ nhớ ngắn hạn dài hạn

TensorFlow, PyTorch và Keras có các khả năng tích hợp để cho phép chúng tôi tạo các kiến ​​trúc RNN phổ biến. Sự khác biệt nằm ở giao diện của chúng.

Keras có một giao diện đơn giản với một danh sách nhỏ các tham số được xác định rõ ràng, điều này làm cho các lớp trên dễ thực hiện. Là một API cấp cao trên TensorFlow, chúng ta có thể nói rằng Keras làm cho TensorFlow trở nên dễ dàng. Mặc dù PyTorch cung cấp mức độ linh hoạt tương tự như TensorFlow, nhưng nó có giao diện gọn gàng hơn nhiều.

Trong khi chúng ta đang nói về chủ đề này, chúng ta hãy đi sâu hơn vào một nghiên cứu so sánh dựa trên tính dễ sử dụng cho từng khuôn khổ.

2. Dễ sử dụng: TensorFlow vs PyTorch vs Keras

TensorFlow thường bị khiển trách vì API không toàn diện của nó. PyTorch thân thiện hơn và dễ sử dụng hơn. Nhìn chung, khung công tác PyTorch được tích hợp chặt chẽ hơn với ngôn ngữ Python và cảm thấy bản địa hơn hầu hết thời gian. Khi bạn viết trên TensorFlow, đôi khi bạn cảm thấy rằng mô hình của mình nằm sau một bức tường gạch với nhiều lỗ nhỏ để giao tiếp. 

Hãy thảo luận thêm một vài yếu tố so sánh ba yếu tố này, dựa trên tính dễ sử dụng của chúng:

Đồ thị tính toán tĩnh so với đồ thị tính toán động

Yếu tố này đặc biệt quan trọng trong NLP. TensorFlow sử dụng đồ thị tĩnh để tính toán trong khi PyTorch sử dụng đồ thị tính toán động.

Điều này có nghĩa là trong Tensorflow, bạn xác định tĩnh đồ thị tính toán trước khi chạy mô hình. Tất cả giao tiếp với thế giới bên ngoài được thực hiện thông qua đối tượng tf.Session và tf.Placeholder, là các tensor sẽ được thay thế bởi dữ liệu bên ngoài trong thời gian chạy.

Trong PyTorch, mọi thứ trở nên bắt buộc và năng động hơn: bạn có thể xác định, thay đổi và thực thi các nút khi bạn thực hiện; không có giao diện phiên đặc biệt hoặc trình giữ chỗ.

Trong RNN, với đồ thị tĩnh, độ dài chuỗi đầu vào sẽ không đổi. Điều này có nghĩa là nếu bạn phát triển một mô hình phân tích tình cảm cho các câu tiếng Anh, bạn phải sửa độ dài câu thành một giá trị lớn nhất nào đó và đệm tất cả các chuỗi nhỏ hơn bằng số không. Không quá tiện phải không?

Gỡ lỗi

Vì đồ thị tính toán trong PyTorch được xác định trong thời gian chạy, bạn có thể sử dụng các công cụ gỡ lỗi Python yêu thích của chúng tôi như trình gỡ lỗi pdb, ipdb, PyCharm hoặc các câu lệnh in cũ đáng tin cậy.

Đây không phải là trường hợp của TensorFlow. Bạn có một tùy chọn để sử dụng một công cụ đặc biệt được gọi là tfdbg , cho phép bạn đánh giá các biểu thức TensorFlow trong thời gian chạy và duyệt qua tất cả các tensor và hoạt động trong phạm vi phiên. Tất nhiên, bạn sẽ không thể gỡ lỗi bất kỳ mã python nào với nó, vì vậy sẽ cần phải sử dụng pdb riêng.

  • Quy mô cộng đồng:

Tensorflow trưởng thành hơn PyTorch. Nó có một cộng đồng lớn hơn nhiều so với PyTorch và Keras cộng lại. Cơ sở người dùng của nó đang tăng nhanh hơn cả PyTorch và Keras.

Vì vậy, điều này có nghĩa là:

  • Một cộng đồng StackOverFlow lớn hơn để trợ giúp các vấn đề của bạn
  • Một bộ tài liệu học trực tuyến lớn hơn - blog, video, khóa học, v.v.
  • Áp dụng nhanh hơn các kỹ thuật Học sâu mới nhất

Tương lai của NLP

Mặc dù Mạng thần kinh tái tạo đã là kiến ​​trúc “đi đến” cho các tác vụ NLP trong một thời gian, nhưng có lẽ nó sẽ không phải là cách này mãi mãi. Chúng tôi đã có một mô hình máy biến áp mới hơn dựa trên cơ chế chú ý đang được các nhà nghiên cứu ưa chuộng.

Nó đã được ca ngợi là tiêu chuẩn NLP mới, thay thế cho Mạng thần kinh tái tạo. Một số nhà bình luận tin rằng Transformer sẽ trở thành kiến ​​trúc học sâu NLP thống trị năm 2019 .

Tensorflow dường như đang dẫn đầu trong cuộc đua này:

Nói như vậy không có nghĩa là PyTorch còn kém xa, rất nhiều mẫu biến áp được đào tạo trước có sẵn tại GitHub của Huggingface:  https://github.com/huggingface/pytorch-transformers .

Vì vậy, đó là tất cả về so sánh. Nhưng trước khi chia tay, hãy để tôi kể cho bạn nghe về một điều có thể khiến toàn bộ cuộc trò chuyện này trở nên lỗi thời trong 1 năm!

TensorFlow 2.0

Google gần đây đã công bố Tensorflow 2.0 và nó là một người thay đổi cuộc chơi!

Đây là cách thực hiện:

  • Trong tương lai, Keras sẽ là API cấp cao cho TensorFlow và nó được mở rộng để bạn có thể sử dụng tất cả các tính năng nâng cao của TensorFlow trực tiếp từ tf.keras . Vì vậy, tất cả TensorFlow với Keras đều đơn giản ở mọi quy mô và với mọi phần cứng.
  • Trong TensorFlow 2.0, thực thi háo hức giờ là mặc định. Bạn có thể tận dụng lợi thế của đồ thị ngay cả trong bối cảnh háo hức, điều này giúp bạn dễ dàng gỡ lỗi và tạo mẫu, trong khi thời gian chạy TensorFlow chăm sóc hiệu suất và mở rộng quy mô.
  • Tích hợp TensorBoard với Keras, hiện là… một- liner!

Vì vậy, tôi đoán vậy, điều đó làm giảm gần như tất cả những phàn nàn mà mọi người có về TensorFlow. Điều đó có nghĩa là TensorFlow sẽ củng cố vị trí của nó như là khuôn khổ phù hợp cho tất cả các nhiệm vụ học sâu và thậm chí còn tốt hơn bây giờ!

6 hữu ích 0 bình luận 10k xem chia sẻ

Có thể bạn quan tâm

loading