C ++가 AI에서 덜 널리 사용되는 것처럼 보이는 이유는 무엇입니까?


15

기계 학습 엔지니어와 AI 프로그래머가 C ++이 파이썬보다 기술적으로 더 강력한 언어인데도 C ++이 아닌 AI와 같은 언어를 사용하여 AI 작업을 수행하는 이유를 알고 싶습니다.


2
답변 이 도움 이 될 것입니다
Ugnes

AI에 오신 것을 환영합니다! 질문 제목을 약간 편집했습니다. 고급 파이썬은 구문이 적고 해석 언어이므로 컴파일하지 않고 조정하고 테스트해야합니다. 파이썬은 또한 비트 단위 연산을 허용 합니다 .
DukeZhou

답변:


16

AI 프로그래밍을위한 강력한 언어가 필요하지 않습니다. 대부분의 개발자는 Keras, Torch, Caffe, Watson, TensorFlow 등과 같은 라이브러리를 사용하고 있습니다.이 라이브러리는 고도로 최적화되어 있지만 모든 작업을 처리하며 C와 같은 고성능 언어로 빌드됩니다. Python은 신경망 계층, 데이터로드, 처리 시작 및 결과 표시. 대신 C ++를 사용하면 성능이 거의 향상되지 않지만 메모리 관리를 관리해야하는 개발자가 아닌 사람에게는 더 어려울 것입니다. 또한 몇몇 AI 사람들은 매우 견고한 프로그래밍이나 컴퓨터 과학 배경을 가지고 있지 않을 수 있습니다.

또 다른 유사한 예는 엔진이 C / C ++로 코딩되고 종종 모든 게임 로직이 고급 언어로 스크립팅되는 게임 개발입니다.


1
하드웨어 분야에서 기계 학습 및 nlp 개발 및 작업에 관심이 있다면 AI에 C ++을 사용할 수
있습니까?

1
@AnishGupta : 그렇습니다. 하드웨어가 필요한 처리를 지원한다면 신경망은 특히 프로세서 집약적입니다. TensforFlow는 기본적으로 C ++ (Python 바인딩이 추가됨)이며 API는 다음과 같습니다. tensorflow.org/api_docs/cc
Neil Slater

"대부분의 AI 프로파일은 데이터 과학 분야에서 나옵니다". 데이터 과학은 잘 정의 된 분야조차 아니므로 문장을 이해하거나 오해하지 않을 수 있습니다.
nbro

1
"C ++를 대신 사용하면 성능이 거의 향상되지 않지만 메모리 관리를 필요로하기 때문에 비 개발자에게는 더 어려울 것입니다." C ++로 메모리 관리를 잘 작성하면 메모리 관리에 신경 쓸 필요가 없습니다.
Jérémy Blain

AI 프로그래밍은 Keras 및 Torch와 같은 기존 라이브러리를 사용하는 것만이 아닙니다. 신경망은 외부 의존성없이 처음부터 프로그래밍 할 수 있습니다. 3 계층 퍼셉트론의 예는 인터넷에서 구할 수 있으며 S 자형 활성화 기능은 4 줄의 코드에 적합합니다. 기존 라이브러리없이 신경망을 구현하는 것이 주제를 이해하는 가장 쉬운 방법이라고 말할 수 있습니다.
Manuel Rodriguez


5

유연성이 얼마나 필요한지에 따라 달라집니다. 생산 준비가 완료된 시스템이 많고 조정이 많이 필요하지 않은 경우 C ++ (또는 C)도 좋습니다. 소프트웨어를 만드는 데 많은 시간을 할애해야하지만, 꽤 빨리 실행되어야합니다.

그러나 여전히 설정 및 매개 변수를 실험하고 아키텍처를 조정 해야하는 경우 C ++이 서투르게 작동합니다. 변경하기 쉽도록 Python과 같은 언어가 필요합니다. 일반적으로 Python과 같은 언어로 더 빠르게 코딩 할 수 있으므로 코드 변경이 더 쉽습니다. 당신이 지불하는 가격은 소프트웨어가 일반적으로 잘 작동하지 않는 것입니다.

그 절충이 어떻게 가장 잘 작동하는지 결정해야합니다. 일반적으로 코딩에 더 적은 시간을 소비하고 더 긴 런타임에 대해 너무 걱정하지 않는 것이 좋습니다. 코드를 작성하는 데 하루가 덜 걸리면 C 코드 버전을 따라 잡는 데 많은 시간이 걸립니다. 대부분의 경우 가치가 없습니다.

일반적인 접근 방식은 코어 라이브러리가 C / C ++로 구현되는 하이브리드 시스템으로, 많은 변경이 필요하지 않으며, 프론트 엔드 / 접착제 / 인터페이스는 Python으로되어 있습니다. 유연성과 속도가 필요하지 않기 때문입니다. 그 중요한.

그건 그렇고 AI에 관한 문제는 아니지만 해석 된 언어와 컴파일 된 언어의 일반적인 질문입니다. AI를 사용하면 많은 시스템이 여전히 애플리케이션보다는 연구에 중점을두고 있으며, 개발 속도가 실행 속도보다 우선합니다.


1
C ++로 수행하면 파이썬보다 빠른 실행을 얻을 수 있으며 성능 수준은 다음과 같이 명시되어 있기 때문에 성능 수준에 대해 무엇입니까? C ++은 파이썬보다 400 배 빠릅니다.
Mark ellon

1
그 일반적인 수치는 아무 의미가 없습니다. 정확한 적용에 달려 있습니다. 대부분의 상황에서는 400 배가 너무 낙관적이라고 생각합니다. 그러나 요점은 소프트웨어를 코딩하고 디버깅하는 데 500 배 더 오래 걸리더라도 400 배의 속도 향상도 여전히 느리다는 것입니다! 분명히 숫자는 약간 임의적이지만 프로그램을 올바르게 얻는 데 걸리는 시간을 과소 평가하지 마십시오. 개발 속도가 빨라지면 속도 증가가 상쇄되는 경우가 종종 있습니다.
Oliver Mason

1
나는 파이썬과 C ++에 tensorflow 라이브러리를 사용하여 코드에 신경 그물을 시도 .. 그리고 난 그 발견 : C ++로 코딩 된 신경망 알고리즘은 동일한 라이브러리와 동일한 알고리즘이 사용하는 파이썬보다 빠른 280X 번 실행
마크 ellon

1
파이썬 대신 머신 러닝 알고리즘 구현에 C ++를 사용하지 않는 이유
Mark ellon

1
위의 내 답변보기 ...
Oliver Mason

2

AI 애플리케이션을위한 소프트웨어 개발은 ​​프로그래밍 자체와 프로토 타입으로 분리 될 수 있습니다. C / C ++는 매우 빠르게 실행되고 주류 운영 체제의 라이브러리로 제공 될 수 있기 때문에 응용 프로그램을 작성하는 데 유용한 언어입니다. 누군가가 턴키 어플라이언스를 배포하려는 경우 사전 컴파일 된 C / C ++ 애플리케이션이 최고의 표준입니다.

C ++은 GCC 나 LLVM 컴파일러로 프로그램을 컴파일하기 전에 어떤 알고리즘이 필요한지 알아야하는 중대한 문제가 있습니다. C ++은 주어진 소스 코드를 실행할 수 있고 효율적인 명령을 제공하지만 배열을 채워야하는 방식과 코드에 필요한 루프가 확실하지 않습니다. 이 질문은 응용 프로그램이 프로그래밍되기 전에 오는 프로토 타이핑 단계에 적합합니다. 문제는 컴파일 된 응용 프로그램을 빌드하고이를 운영 체제 패키지로 제공하는 방법이 아니라 다른 AI 알고리즘을 사용하여 일부 GUI 프로토 타입을 작성하고 팀 구성원과 진행 상황을 논의하는 것입니다.

스크립팅 프로그래밍을 기반으로하고 유사 의사 코드 기능을 제공하는 최고의 GUI 프로토 타입 언어는 Guido van Rossum이 발명했습니다. C ++을 대체하지는 않지만 새로운 종류의 도메인을 만듭니다. 소프트웨어가 구현되기 전에, 특히 혁신적인 인공 지능 영역에서 프로토 타입 단계가 필요합니다.

Python이 C ++보다 우수한 이유를 설명하기 위해 C ++로 소프트웨어 프로토 타입을 작성해야합니다. GUI 응용 프로그램을 빠르게 구현하기 위해 해당 언어를 사용할 수 있습니까? C ++은 빠른 ​​편집주기를 가진 프로토 타입 언어가 아니라 시스템 프로그래머를위한 견고한 암석으로 설계되지 않았습니다. 즉, 프로토 타입이 이미 작동중인 경우 알고리즘이 수정되어 있고 문서가 작성된 경우 C ++로 코드를 다시 프로그래밍하는 것이 좋습니다. 즉, 주어진 Python 프로토 타입이 C ++로 변환되어 기존 운영 체제로 제공됩니다. 그러나 논문 작성, 대안 논의 및 혁신 관리와 관련된 사전 단계에서는 Python이 더 나은 선택입니다.


0

당신은 주장

C ++은 기술적으로 파이썬보다 강력한 언어입니다.

그러나 그 주장은 틀렸다 (또는 그다지 의미가 없다). 기억 프로그래밍 언어가 있습니다 사양 (영어로 작성 종종 어떤 문서). 예를 들어, n3337 은 C ++ 사양의 초안입니다. 나는 파이썬을 좋아하지 않지만 C ++보다 강력 해 보입니다 (C ++ 구현 이 일반적으로 파이썬보다 빠르 더라도 ) 반대로.

이론적으로 C ++과 Python은 Turing-complete (의도적으로) 프로그래밍 언어입니다.

그리고 파이썬은 C ++만큼 표현력이 좋습니다. 파이썬은 관련 제외 (C ++를 가지고 있지만하지 않는 것이 내가 프로그래밍 언어 기능의 이름을 수없는 반사 , 또한 볼 대답을하고 인식 dlopen- 내 볼 manydl.c의 프로그램을 -의 LLVMlibgccjitlibbacktrace , 일부 고려 메타 -programming 라 A, 그들과 접근 방식을 Bismon 또는 같은 J.Pitrat의 블로그하면 ) 그것을 옹호.

아마도 당신은 프로그래밍 언어를 그것을 구현하는 소프트웨어라고 생각할 수 있습니다. 그렇다면 파이썬은 C ++만큼 표현력이 뛰어납니다 (배우기 쉽지만 환상입니다. 환상에 대한 자세한 내용 은 http://norvig.com/21-days.html 참조 ). 파이썬과 C ++는 문법이 매우 다르더라도 비슷한 의미를 가지고 있습니다 . 그들의 타입 시스템 은 매우 다릅니다.

슬프게도, 최근의 주요 기계 학습 라이브러리 (예 : TensorFlow 또는 Gudhi )는 실제로 C ++보다 Python에서 사용하기 쉽습니다. 그러나 TensorFlow와 Gudhi는 대부분 C ++로 코딩되며 C ++ API (Python만이 아니라)를 제공하고 문서화하므로 C ++ 코드에서 TensorFlow 또는 Gudhi를 사용할 수 있습니다 .

C ++은 멀티 스레드 프로그래밍을 가능하게 하지만 일반적인 파이썬 구현에는 GIL이 있고 바이트 코드화 되므로 C ++ (일반적 으로 GCC 또는 Clang 과 같은 컴파일러최적화 하여 컴파일 되지만 Cling 과 같은 C ++ 해석기를 찾을 수 있음) 보다 상당히 느립니다 . Python의 일부 실험 구현은 JIT 컴파일 되고 GIL이 없습니다. 그러나 이것들은 성숙하지 않습니다 . TRL 을 높이기 위해 백만 유로를 투자하는 것이 좋습니다 .

C ++은 Python보다 배우기가 훨씬 어렵다는 점도 관찰하십시오. 십여 년에 걸친 C ++ 프로그래밍 경험에도 불구하고, 나는 대부분의 C ++을 실제로 알고 있다고 주장 할 수 없습니다.

안타깝게도 AI 소프트웨어 공학 (예 : 책 또는 책 책)을 가르치는 가장 최근의 책 은 예제로 Python (C ++ 아님)을 사용합니다. 실제로 C ++를 사용하는 최신 AI 책을 원합니다!

BTW, 나는 (같은 오픈 소스 소프트웨어 프로그램 하나, 또는 오래된 GCC MELT AI 기술을 사용하여), 그러나 그들은 파이썬을 사용하지 마십시오. AI 응용 프로그램에 대한 나의 접근 방식은 일부 DSL 설계를 시작 하는 것입니다.

일부 AI 접근법은 메타 프로그래밍과 관련이 있습니다. 예를 들어 시스템 코드 자체를 생성하는 것 (또는 대부분 또는 전부). J.Pitrat (2019 년 10 월에 사망)는이 접근 방식을 개척했습니다. 참조 자신의 블로그 , 자신의 CAIA 시스템 및 RefPerSys (그의 야망 대부분의 - 그리고 잘하면 모든 -의 C ++ 코드를 생성하는 것입니다)을 프로젝트.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.