Trong AI (và có lẽ nhiều lĩnh vực khác nữa), thời gian dành cho các lập trình viên của con người có xu hướng có giá trị / đắt hơn đáng kể so với thời gian chạy chương trình. Tất nhiên điều này không phải lúc nào cũng đúng (giống như không phải lúc nào Python cũng được sử dụng chứ không phải C hay C ++), nhưng nó thường đúng.
Đặc biệt trong trường hợp nghiên cứu, điều cực kỳ quan trọng là có thể lặp lại ý tưởng một cách nhanh chóng. Chúng ta cần có khả năng nhanh chóng thực hiện các ý tưởng mới, thử nghiệm chúng, có thể trải qua một vài lần lặp lại lỗi, kiểm tra lại, v.v ... Rất hiếm khi nút cổ chai trong lần lặp ý tưởng này là thời gian chạy của một ý tưởng / thuật toán mới. Thời gian dành cho việc lập trình của con người có xu hướng trở thành nút cổ chai thường xuyên hơn. Các ý tưởng thường có thể được kiểm tra nhanh chóng đối với các sự cố đồ chơi nhỏ dù không mất nhiều thời gian chạy hoặc chạy qua đêm / chạy trong khi lập trình viên bận viết mã khác.
Làm tất cả những gì lặp đi lặp lại, thực hiện nhanh chóng các ý tưởng mới, v.v ... có xu hướng dễ dàng hơn / nhanh hơn trong Python so với C hoặc C ++. Tất nhiên điều này không nhất thiết đúng với mọi người, nếu ai đó đã có nhiều kinh nghiệm về C ++ và ít kinh nghiệm về Python, họ có thể thực hiện các ý tưởng mới nhanh hơn trong C ++. Điều này dường như không phải là trường hợp cho phần lớn mọi người. Những lợi thế rõ ràng mà Python có về mặt nhanh chóng có thể thực hiện những ý tưởng mới bao gồm:
- Ít dài dòng hơn, không cần nhập nhiều (ví dụ:
results = []
trong Python so với std::vector<double> results;
C ++ để tạo một danh sách trống mà chúng ta có thể bắt đầu nối thêm một số kết quả vào một thử nghiệm).
- Không cần phải lo lắng về quản lý bộ nhớ, con trỏ, tất cả những thứ có thể thực hiện được bằng kinh nghiệm nhưng chắc chắn cần phải chú ý, có nhiều khả năng dẫn đến lỗi thêm, v.v.
- Không cần phải trải qua quá trình biên dịch / xây dựng . Đây có thể là một cái rất lớn, rất dễ quên.
- Ít rắc rối hơn khi có các cấu trúc dữ liệu chứa các loại thuộc các loại khác nhau (ví dụ:
config = {'algorithm': 'RandomForest', 'n_trees': 50}
trong Python vs .... không có ý tưởng nào trong C ++)
Một điểm quan trọng khác là phần lớn mã mà mọi người trong AI viết không phải là các phần nhạy cảm với hiệu suất . Một lần nữa, có thể không đúng với tất cả mọi người, nhưng đúng là đặc biệt trong các thiết lập nghiên cứu. Hầu hết các nhà nghiên cứu không dành phần lớn thời gian của họ để viết mã cho các lần chuyển tiếp / lùi trong Mạng thần kinh. Họ dành nhiều thời gian hơn cho những thứ như:
- Dữ liệu tiền xử lý (không phải lúc nào cũng dễ dàng viết mã có thể sử dụng lại dễ dàng, các đoạn quan trọng sẽ là đặc thù của dự án / dữ liệu cụ thể)
- Thiết lập thử nghiệm (ví dụ: vòng lặp đào tạo bên ngoài, kết quả in / ghi nhật ký, ...)
- Xử lý kết quả, tạo ra tất cả các loại lô ưa thích, vv
- Các thuật toán hoàn toàn mới (một phần của) (ví dụ: một biến thể mới trong danh sách SGD / RMSProp / ADAM / v.v., có thể chỉ là một vài dòng mã đơn giản có thể được cắm thẳng vào một khung công tác hiện có, với nhiều phép toán & giấy hơn đằng sau nó).
Bây giờ, điểm cuối cùng trong một số trường hợp có thể nhạy cảm với hiệu suất, nhưng vẫn còn, mối quan tâm ban đầu sẽ không phải là hiệu suất. Mối quan tâm ban đầu sẽ là; nó sẽ hoạt động chứ? Điều này có thể được đánh giá trên các vấn đề đơn giản hơn hoặc với mã ít hiệu suất hơn chỉ đơn giản bằng cách đợi lâu hơn một chút, điều quan trọng hơn là có thể thực hiện nó trước tiên. Như đã đề cập trong các câu trả lời khác, nhờ các khung dựa trên C như Tensorflow
và numpy
, những thứ này khá thường xuyên có thể được thực hiện ngay cả từ Python.
Cuối cùng, sự tồn tại của các thư viện và khung công tác mã nguồn mở nổi tiếng, dễ sử dụng, được thiết lập, đã đứng trước thử thách của thời gian là vô cùng quan trọng. Trong Python, chúng ta có:
- Numpy
- Gấu trúc
- Matplotlib, Seaborn
- học hỏi
- Dòng chảy, Pytorch
- XGBoost
Một lần nữa, nhiều trong số đó có các phần được triển khai trong C / C ++ khi hiệu năng cũng vậy.
Lưu ý rằng, khi tôi nói về nghiên cứu, điều này không chỉ có nghĩa là "học viện". AI trong công nghiệp cũng sẽ thường có một số hương vị của nghiên cứu. Những người trong ngành không có khả năng thực hiện Mạng nơ-ron từ đầu hết lần này đến lần khác. Nhiều khả năng họ đang sử dụng lại các triển khai đã hiệu quả (ví dụ như Tensorflow), nhưng đang cố gắng áp dụng chúng cho dữ liệu mới (nơi họ sẽ phải viết một số mã soạn sẵn mới xung quanh nó, rất nhanh chóng và dễ dàng trong Python) hoặc thử các kiến trúc mới hoặc cố gắng trực quan hóa dữ liệu và / hoặc kết quả, v.v.