Tại sao C ++ dường như ít được sử dụng rộng rãi trong AI?


15

Tôi chỉ muốn biết tại sao các kỹ sư của Machine Learning và các lập trình viên AI sử dụng các ngôn ngữ như python để thực hiện nhiệm vụ AI chứ không phải C ++ mặc dù về mặt kỹ thuật là ngôn ngữ mạnh hơn python.


2
Đây câu trả lời sẽ giúp
Ugnes

Chào mừng bạn đến với AI! Tôi đã chỉnh sửa một chút tiêu đề của câu hỏi. Cấp cao, Python có cú pháp nhẹ và là một ngôn ngữ được dịch, có nghĩa là điều chỉnh và kiểm tra mà không cần biên dịch. Python cũng cho phép các hoạt động bitwise .
DukeZhou

Câu trả lời:


16

Bạn không cần một ngôn ngữ mạnh mẽ để lập trình AI. Hầu hết các nhà phát triển đang sử dụng các thư viện như Keras, Torch, Caffe, Watson, TensorFlow, v.v. Những thư viện đó được tối ưu hóa cao và xử lý tất cả mọi công việc, chúng được xây dựng với các ngôn ngữ hiệu suất cao, như C. Python chỉ ở đó để mô tả các lớp mạng thần kinh, tải dữ liệu, khởi chạy kết quả xử lý và hiển thị. Thay vào đó, sử dụng C ++ sẽ giúp cải thiện hiệu năng, nhưng sẽ khó hơn đối với những người không phải là nhà phát triển vì nó đòi hỏi phải quản lý bộ nhớ. Ngoài ra, một số người AI có thể không có nền tảng lập trình hoặc khoa học máy tính rất vững chắc.

Một ví dụ tương tự khác là phát triển trò chơi, trong đó công cụ được mã hóa bằng C / C ++ và thông thường, tất cả logic của trò chơi được viết theo ngôn ngữ cấp cao.


1
Nếu tôi quan tâm đến việc phát triển và làm việc với máy học và nlp cho lĩnh vực phần cứng .. Vậy tôi có thể sử dụng C ++ cho AI
Mark ellon

1
@AquerGupta: Có, bạn có thể, với điều kiện phần cứng hỗ trợ xử lý cần thiết (đặc biệt là các mạng thần kinh rất chuyên sâu về bộ xử lý). Trên thực tế, TensforFlow thực sự là C ++ (các ràng buộc Python là một bổ sung) và đây là API: tenorflow.org/api_docs/cc
Neil Slater

"Hầu hết các hồ sơ AI đến từ lĩnh vực khoa học dữ liệu". Khoa học dữ liệu thậm chí không phải là một lĩnh vực được xác định rõ ràng, vì vậy câu của bạn có thể không được hiểu hoặc hiểu sai.
nbro

1
"Sử dụng C ++ thay vào đó sẽ giúp cải thiện hiệu năng, nhưng sẽ khó hơn đối với những người không phải là nhà phát triển vì nó đòi hỏi phải quản lý bộ nhớ." Bạn không cần quan tâm đến việc quản lý bộ nhớ với C ++ nếu bạn viết tốt.
Jérémy Blain

Lập trình AI không chỉ là về việc sử dụng các thư viện hiện có như Keras và Torch. Một mạng lưới thần kinh có thể được lập trình từ đầu mà không cần phụ thuộc bên ngoài. Ví dụ cho một tri giác 3 lớp có sẵn trên internet và chức năng kích hoạt sigmoid phù hợp với 4 dòng mã. Tôi muốn nói rằng, thực hiện một mạng lưới thần kinh mà không có các thư viện hiện có là cách dễ dàng hơn để hiểu chủ đề.
Manuel Rodriguez

9

C ++ thực sự là một trong những ngôn ngữ phổ biến nhất được sử dụng trong không gian AI / ML. Python có thể phổ biến hơn nói chung, nhưng như những người khác đã lưu ý, thực sự khá phổ biến khi có các hệ thống lai trong đó việc xử lý số lượng lớn CPU được thực hiện trong C ++ và Python được sử dụng cho các chức năng cấp cao hơn.

Chỉ để minh họa:

http://mloss.org/software/lingu/c__/

http://mloss.org/software/lingu/python/


5

Nó phụ thuộc vào mức độ linh hoạt của nó: nếu bạn có một hệ thống hoàn chỉnh sẵn sàng để sản xuất, điều này sẽ không cần điều chỉnh nhiều, thì C ++ (hoặc thậm chí C) có thể sẽ ổn. Bạn cần dành nhiều thời gian để xây dựng phần mềm, nhưng sau đó nó sẽ chạy khá nhanh.

Tuy nhiên, nếu bạn vẫn đang thử nghiệm các cài đặt và tham số và có thể cần điều chỉnh kiến ​​trúc, thì C ++ sẽ vụng về để làm việc. Bạn cần một ngôn ngữ như Python giúp thay đổi mọi thứ dễ dàng hơn. Thay đổi mã dễ dàng hơn, vì bạn thường có thể viết mã nhanh hơn bằng các ngôn ngữ như Python. Cái giá bạn phải trả là phần mềm thường không hoạt động tốt.

Bạn cần phải quyết định cách đánh đổi đó phù hợp nhất với bạn. Thông thường tốt hơn là dành ít thời gian hơn cho mã hóa, và không phải lo lắng quá nhiều về thời gian chạy dài hơn. Nếu bạn mất ít hơn một ngày để hoàn thành mã của mình, đó là rất nhiều thời gian phiên bản mã hóa C cần phải bắt kịp. Hầu hết thời gian nó không đáng.

Một cách tiếp cận phổ biến dường như là các hệ thống kết hợp, trong đó các thư viện lõi được triển khai trong C / C ++, vì chúng không cần thay đổi nhiều, và giao diện / keo / giao diện ở trong Python, vì ở đó bạn cần sự linh hoạt và tốc độ không phải là mà quan trọng.

Tuy nhiên, đây không phải là một vấn đề cụ thể đối với AI, mà là một câu hỏi chung về ngôn ngữ được giải thích so với các ngôn ngữ được biên dịch. Với AI, rất nhiều hệ thống vẫn tập trung vào nghiên cứu hơn là ứng dụng và đó là nơi tốc độ phát triển vượt qua tốc độ thực thi.


1
Nếu tôi làm điều đó với C ++ thì tôi có thể thực hiện nhanh hơn python không và mức độ hiệu năng vì nó được tuyên bố rằng: C ++ nhanh hơn 400 lần so với python
Mark ellon

1
Con số chung đó không có nghĩa gì cả - nó thực sự phụ thuộc vào ứng dụng chính xác. Tôi nghĩ 400 lần có lẽ là quá lạc quan cho hầu hết các tình huống. Nhưng vấn đề là nếu bạn mất 500 lần để viết mã (và gỡ lỗi!) Phần mềm, thì ngay cả tốc độ cải thiện 400 lần vẫn sẽ chậm hơn! Rõ ràng các con số là một chút ngẫu nhiên, nhưng đừng đánh giá thấp thời gian bạn cần để có được chương trình của bạn đúng. Thông thường, bạn sẽ thấy rằng sự gia tăng tốc độ sẽ được bù đắp nhiều hơn bởi thời gian phát triển nhanh hơn.
Oliver Mason

1
Tôi đã thử mã hóa mạng lưới thần kinh bằng các thư viện tenorflow trong python và C ++ .. và tôi thấy rằng: thuật toán mạng thần kinh được mã hóa trong C ++ chạy nhanh hơn 280 lần so với python trong đó các thư viện và thuật toán tương tự đã được sử dụng
Đánh dấu Ellon

1
Vậy tại sao không sử dụng C ++ để triển khai thuật toán học máy hơn là python
Mark ellon

1
Xem câu trả lời của tôi ở trên ...
Oliver Mason

2

Phát triển phần mềm cho các ứng dụng AI có thể được tách thành lập trình và tạo mẫu. C / C ++ là một ngôn ngữ tuyệt vời để tạo ứng dụng vì nó chạy rất nhanh và có thể được phân phối dưới dạng thư viện cho các hệ điều hành chính thống. Ứng dụng C / C ++ được biên dịch sẵn là tiêu chuẩn vàng nếu ai đó muốn triển khai thiết bị chìa khóa trao tay.

C ++ có một vấn đề lớn, trước khi một chương trình có thể được biên dịch bằng GCC hoặc trình biên dịch LLVM, ai đó cần biết thuật toán nào anh ta cần. C ++ có thể thực thi một mã nguồn đã cho và cung cấp các lệnh hiệu quả nhưng theo cách đó, mảng phải được điền và các vòng lặp cần thiết trong mã không rõ ràng. Câu hỏi này phù hợp với bước tạo mẫu trước khi ứng dụng được lập trình. Vấn đề không phải là làm thế nào để xây dựng một ứng dụng được biên dịch và cung cấp nó như một gói hệ điều hành, vấn đề là chơi với thuật toán AI khác nhau, xây dựng một số nguyên mẫu gui và thảo luận về tiến trình của các thành viên trong nhóm.

Ngôn ngữ tạo mẫu gui số một dựa trên lập trình kịch bản và cung cấp các khả năng gần mã giả được phát minh bởi Guido van Rossum. Nó không bao giờ thay thế C ++, nhưng nó tạo ra một loại tên miền mới. Cần có một bước tạo mẫu trước khi phần mềm được triển khai, đặc biệt là trong lĩnh vực Trí tuệ nhân tạo sáng tạo.

Để giải thích tại sao Python vượt trội hơn C ++, chúng tôi phải cố gắng xây dựng một nguyên mẫu phần mềm với C ++. Có thể sử dụng ngôn ngữ đó để triển khai nhanh ứng dụng gui không? Không có C ++ được thiết kế không phải là ngôn ngữ tạo mẫu với chu kỳ chỉnh sửa nhanh, mà là một tảng đá vững chắc cho các lập trình viên hệ thống. Điều đó có nghĩa là, nếu nguyên mẫu đã hoạt động, nếu thuật toán được sửa chữa và nếu tài liệu được viết, nó có ý nghĩa để lập trình lại mã trong C ++. Điều đó có nghĩa là, một nguyên mẫu Python đã cho được chuyển đổi thành C ++ và được gửi đến các hệ điều hành hiện có. Nhưng đối với bước trước phải làm với việc viết bài, thảo luận về các lựa chọn thay thế và quản lý đổi mới, Python là lựa chọn tốt hơn.


0

Bạn cho rằng

C ++ về mặt kỹ thuật là ngôn ngữ mạnh hơn python.

Nhưng tuyên bố đó là sai (hoặc không có nghĩa nhiều). Hãy nhớ rằng một ngôn ngữ lập trình là một đặc điểm kỹ thuật (thường là một số tài liệu viết bằng tiếng Anh). Ví dụ, n3337 là bản nháp cuối của đặc tả C ++. Tôi không thích Python, nhưng nó có vẻ mạnh hơn C ++ (ngay cả khi C ++ việc triển khai thường nhanh hơn Python): điều mà một lập trình viên Python giỏi có thể viết mã tốt trong Python, một lập trình viên C ++ giỏi khác có thể viết mã tốt trong C ++ và ngược lại ngược lại

Về mặt lý thuyết, cả C ++ và Python đều ngôn ngữ lập trình Turing-Complete (về mục đích).

Và Python cũng biểu cảm như C ++. Tôi không thể đặt tên cho một tính năng ngôn ngữ lập trình mà Python có nhưng không có C ++ (ngoại trừ những tính năng liên quan đến sự phản chiếu ; cũng xem câu trả lời này và nhận biết dlopen- xem chương trình manydl.c của tôi -, về LLVM , của libgccjit , của libbacktrace và xem xét một số meta - lập trình phương pháp tiếp cận với họ, à Bismon hoặc như blog của J.Pitrat ủng hộ nó).

Có thể bạn nghĩ về một ngôn ngữ lập trình là phần mềm thực hiện nó. Sau đó, Python cũng biểu cảm như C ++ (và có vẻ dễ học hơn, nhưng đó chỉ là ảo ảnh; xem http://norvig.com/21-days.html để biết thêm về ảo ảnh đó). Python và C ++ có một ngữ nghĩa khá giống nhau , ngay cả khi cú pháp của chúng rất khác nhau. Của chúngHệ thống loại rất khác nhau.

Đáng buồn là, nhiều thư viện máy học lớn gần đây (chẳng hạn như TensorFlow hoặc Gudhi ) trong thực tế dễ sử dụng trong Python hơn trong C ++. Nhưng bạn có thể sử dụng TensorFlow hoặc Gudhi từ mã C ++ vì TensorFlow và Gudhi chủ yếu được mã hóa trong C ++ và cả cung cấp và ghi lại C ++ API (không chỉ là Python).

C ++ cho phép lập trình đa luồng , nhưng việc triển khai Python thông thường có GIL , được mã hóa bằng mã hóa , do đó chậm hơn đáng kể so với C ++ (thường được biên dịch bằng cách tối ưu hóa các trình biên dịch như GCC hoặc Clang ; tuy nhiên bạn có thể tìm thấy các trình thông dịch C ++, ví dụ Cling ). Một số triển khai thử nghiệm của Python được biên dịch JIT và không có GIL. Nhưng những điều này chưa trưởng thành: Tôi khuyên bạn nên đầu tư một triệu euro để tăng TRL của họ .

Cũng quan sát rằng C ++ khó học hơn nhiều so với Python. Ngay cả với hàng chục năm kinh nghiệm lập trình C ++, tôi không thể khẳng định mình thực sự biết hầu hết C ++.

Đáng buồn thay, cuốn sách gần đây nhất giảng dạy công nghệ phần mềm AI (ví dụ này một hoặc rằng một) sử dụng Python (không phải C ++) cho các ví dụ của họ. Tôi thực sự muốn có nhiều sách AI gần đây hơn bằng C ++!

BTW, tôi lập trình phần mềm nguồn mở (như phần mềm này hoặc GCC MELT lỗi thời ) bằng các kỹ thuật AI, nhưng họ không sử dụng Python. Cách tiếp cận của tôi với các ứng dụng AI là bắt đầu thiết kế một số DSL trong đó.

Một số cách tiếp cận AI liên quan đến siêu lập trình, ví dụ như tự tạo một số (hoặc hầu hết hoặc thậm chí tất cả) mã của một hệ thống. J.Pitrat (ông đã qua đời vào tháng 10 năm 2019) đã tiên phong trong phương pháp này. Xem blog của anh ấy , hệ thống CAIA của anh ấy và dự án RefPerSys (có tham vọng tạo ra hầu hết - và hy vọng tất cả - mã C ++ của nó).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.