AI とビッグデータの時代に最初の開発言語になるのは誰でしょうか?これは議論の必要のない問題です。 3 年前、Matlab、Scala、R、Java、Python にはまだ独自のチャンスがあり、状況はまだ不透明でしたが、3 年後、特に Facebook が 2 日前に PyTorch をオープンソース化した後、傾向は非常に明確になりました。 AIになる 時代のトップ言語の地位はほぼ確立しており、誰が2位の座を確保できるかが今後の楽しみだ。
Google の AI が囲碁の達人を破ったことは、人工知能の突然の急速な発展を測る方法であり、また、これらのテクノロジーがどのように発展してきたか、また将来どのように発展する可能性があるかを明らかにするものでもあります。
人工知能は、現在独自のツールセットの開発に取り組んでいる未来のテクノロジーです。過去数年間に一連の開発が行われ、30万マイル以上を無事故で運転し、3つの州で合法化され、自動運転のマイルストーンを迎えました。消費者間研究者は、何兆もの画像からなる複雑なデータセットのパターン認識に興味を持っています。これらの開発により、科学者や専門家の間で人工知能への関心が高まることは間違いなく、それによって開発者は人工知能アプリケーション作成の本質を理解することもできます。これらを開発するときに最初に注意すべきことは次のとおりです:
どのプログラミング言語が人工知能に適していますか?
あなたが習熟しているすべてのプログラミング言語は、人工知能の開発言語になる可能性があります。
人工知能プログラムは、ほぼすべてのプログラミング言語を使用して実装できます。最も一般的なものは、Lisp、Prolog、C/C++、最近では Java、最近では Python です。
LISP
LISP のような高水準言語は、非常に人工知能において重要 さまざまな大学での長年の研究の結果、迅速な実行よりもラピッドプロトタイピングが選択されたため、知能の分野で好まれています。ガベージ コレクション、動的型付け、データ関数、統一構文、対話型環境、スケーラビリティなどのいくつかの機能により、LIST は人工知能プログラミングに非常に適しています。
プロローグ
この言語は、AI にとって非常に役立つ LISP の高度な利点と従来の利点を効果的に組み合わせています。その強みは「ロジックベースの問題」を解決することです。 Prolog は、論理関連の問題に対する解決策を提供するか、その解決策は単純な論理特性を備えています。その主な欠点(私見)は、学ぶのが難しいことです。
C/C++
Cheetahと同様に、C/C++は主に実行速度が必要な場合に使用されます。主に単純なプログラムに使用され、ニューラル ネットワークなどの統計的人工知能が一般的です。バックプロパゲーションでは数ページの C/C++ コードしか使用しませんが、プログラマが速度を少し向上させるだけでも、速度が要求されます。
JAVA
初心者の方へ、Java は LISP のいくつかの概念を使用しています。最も明白なものはガベージ コレクションです。移植性があるため、あらゆるプログラムに適用でき、一連の組み込み型も備えています。 Java は LISP や Prolog ほど高度ではなく、C ほど高速でもありませんが、移植性が必要な場合には Java が最適です。
PYTHON
PythonはLISPとJAVAでコンパイルされた言語です。 Norvig の記事における Lips と Python の比較によると、この 2 つの言語はいくつかの小さな違いがあるだけで、互いに非常に似ています。 Java グラフィカル ユーザー インターフェイスへのアクセスを提供する JPthon もあります。これが、Peter Norvig が人工知能の本のプログラムを翻訳するために JPyhton を使用することを選択した理由です。 JPython を使用すると、ポータブル GUI デモンストレーションとポータブル http/ftp/html ライブラリを使用できます。したがって、人工知能言語として非常に適しています。
人工知能に他のプログラミング言語よりも Python を使用する利点
高品質のドキュメント
プラットフォームに依存せず、現在すべての *nix バージョンで使用可能
他のオブジェクト指向プログラミング言語よりも簡単かつ迅速に学習できる
Python Python Imaging Libary、VTK および Maya 3D Visualization Toolkit、Numeric Python、Scientific Python などの画像拡張ライブラリが多数あり、数値および科学アプリケーションに利用できるその他のツールも多数あります。
Python は非常によく設計されており、高速で堅牢で、移植可能で拡張可能です。明らかに、これらは人工知能アプリケーションにとって非常に重要な要素です。
小さなシェル スクリプトから Web サイト全体のアプリケーションまで、科学目的の幅広いプログラミング タスクに役立ちます。
最後に、これはオープンソースです。同じコミュニティサポートが利用可能です。
AI の Python ライブラリ
AI ライブラリ全体
AIMA: Python は、ラッセルから Norvigs の「人工知能: 現代的なアプローチ」までのアルゴリズムを実装します
pyDatalog: Python のロジック プログラミング エンジン
SimpleAI: Python は、説明されている人工知能アルゴリズムを実装します『人工知能: 現代的なアプローチ』という本の中で。使いやすく、十分に文書化され、テストされたライブラリを提供することに重点を置いています。
EasyAI: 2 プレイヤー AI ゲーム用の Python エンジン (負の最大値、置換テーブル、ゲーム解決)
機械学習ライブラリ
PyBrain 機械学習タスク用の柔軟でシンプルかつ効果的なアルゴリズム、モジュール式 Python 機械学習ライブラリ。また、アルゴリズムをテストおよび比較するためのさまざまな事前定義された環境も提供します。
PyML は、Python で書かれた双方向フレームワークであり、SVM およびその他のカーネル メソッドに焦点を当てています。 Linux と Mac OS X をサポートします。
scikit-learn は、さまざまな状況で再利用できる、シンプルかつ強力なソリューション、つまり科学と工学における多用途ツールとしての機械学習を提供することを目的としています。これは、古典的な機械学習アルゴリズムを統合する Python のモジュールです。これらのアルゴリズムは、Python 科学パッケージ (numpy、scipy.matplotlib) と密接にリンクされています。
MDP-Toolkit は、簡単に拡張できる Python データ処理フレームワークです。教師あり学習アルゴリズムと教師なし学習アルゴリズム、およびその他のデータ処理ユニットを収集しており、これらをデータ処理シーケンスやより複雑なフィードフォワード ネットワーク構造に組み合わせることができます。新しいアルゴリズムの実装はシンプルで直感的です。信号処理手法(主成分分析、独立成分分析、低速特徴分析)、フロー学習手法(局所線形埋め込み)、集中分類、確率的手法(因子分析、RBM)、データ前処理手法など、利用可能なアルゴリズムは着実に増加しています。 、など。
自然言語およびテキスト処理ライブラリ
NLTK 自然言語処理とテキスト分析の研究と開発に使用される、オープンソースの Python モジュール、言語データおよびドキュメント。 Windows、Mac OSX、Linux 用のバージョンがあります。
Case
は、人工知能とモノのインターネットを使用して従業員の行動を分析するソフトウェアの実験を実施しました。このソフトウェアは、従業員の感情的および行動的な気晴らしを通じて有益なフィードバックを提供し、それによって管理と仕事の習慣を改善します。
Python 機械学習ライブラリ、opencv、およびハーカスケードの概念を使用したトレーニング。サンプル POC は、さまざまな場所に配置されたワイヤレス カメラを通じて返される、幸福、怒り、悲しみ、嫌悪感、疑惑、軽蔑、皮肉、驚きなどの基本的な感情を検出するために構築されました。収集されたデータはクラウド データベースに集中され、Android デバイスまたはデスクトップからボタンをクリックするだけでオフィス全体を取得することもできます。
開発者は、顔の感情的な複雑さを深く分析し、より詳細を掘り下げる作業を進めています。深層学習アルゴリズムと機械学習の助けを借りて、個々の従業員のパフォーマンスの分析と従業員/チームへの適切なフィードバックを支援できます。
結論
Python は、scikit-learn のような優れたフレームワークを提供するため、人工知能において重要な役割を果たします。Python の機械学習は、この分野のニーズのほとんどを満たします。 D3.js は、JS でデータ駆動型ドキュメントを視覚化するための最も強力で使いやすいツールの 1 つです。処理フレームワークとそのラピッド プロトタイピングにより、無視できない重要な言語となっています。 AI には多くの調査が必要なので、新しい仮説をテストするために 500 KB の Java ボイラープレート コードを要求する必要はありません。 Python のほぼすべてのアイデアは、20 ~ 30 行のコードですぐに実装できます (JS と LISP についても同様です)。したがって、人工知能にとって非常に便利な言語です。
AI およびビッグデータ業界に参加したい開発者にとって、Python のバスケットに卵を入れることは安全であるだけでなく、必須でもあります。逆に言えば、将来この業界で働きたいなら、何も考えずに、まずは目をつぶってPythonを勉強してください。もちろん、Python にも問題や欠点がないわけではありません。Python に匹敵する別の言語や複数の言語を使用することは可能です。しかし、Python がデータ分析と分析のための最初の言語の位置をしっかりと占めることは間違いありません。あい。私は、Python がその地位を確保したこと、この業界が将来的に多くの実践者を必要とすること、そして Python が世界中の大学、中学校、小学校のプログラミング入門コースで急速に好まれる教育言語になりつつあることを理由に、そう考えています。 、このオープンソースの動的スクリプト言語には、近い将来、最初の真のエスペラント語プログラミング言語となるでしょう。
プログラミング言語の長所と短所について議論することは、常に舌戦のテーマとみなされ、年長者からは軽蔑されてきました。しかし今回のPythonの台頭は大きいと思います。今から 15 年後、医師から建設技術者、事務秘書から映画監督、作曲家から営業マンに至るまで、40 歳未満のすべての知識労働者が、同じ基本的なデータ処理言語を使用して人工知能を呼び出すことができるようになったらどうなるか想像してみてください。クラウド上の API、インテリジェント ロボットの制御、そして相互にアイデアを伝達するこのユニバーサル プログラミング コラボレーション ネットワークの重要性は、プログラミング言語に関する論争をはるかに超えています。現在、Python がこの役割の最も有望な候補であると思われます。
Python の欠点は明らかであるため、Python の勝利は驚くべきものです。独自の構文があり、多くの退役軍人を不快にさせます。「裸の」Python は非常に遅く、グローバル インタプリタ ロック (GIL) のせいで、さまざまなタスクで C 言語よりも数十倍から数千倍も遅くなります。 Python プログラムは複数のコアで同時に実行できません。Python 2 と Python 3 の 2 つのバージョンは長い間並行して実行されており、多くのモジュールは 2 つの異なるバージョンを同時に維持する必要があるため、多くの無用な混乱が生じます。 Python はどの企業によっても管理されていないため、Python の幅広いアプリケーションに比べて、そのコア インフラストラクチャへの投資とサポートは実際には非常に弱いです。 。現在に至るまで、26 年が経過した Python には公式の標準 JIT コンパイラがありません。対照的に、Java 言語はリリースから最初の 3 年以内に標準 JIT を取得しました。
別のことが問題をさらに詳しく説明しています。 Python の GIL コア コードは、1992 年に言語の作成者である Guido van Rossum によって書かれました。その後 18 年間、誰もこの重要なコードを 1 バイトも変更していません。十八年! Antoine Pitrou がほぼ 20 年ぶりに GIL に改良を加えたのは 2010 年のことであり、GIL は Python 3.x でのみ使用されていました。これは、現在 Python 2.7 を使用しているほとんどの開発者にとって、作成するすべてのプログラムは依然として 26 年前のコードによって厳しく制限されていることを意味します。
Python はさまざまな問題を抱えながら最前線に躍り出るレーサーですが、数年前ですら、Python に栄冠を勝ち取るチャンスがあると信じている人は多くはありませんでした。 Java の立場は揺るぎないと考えていた人もいます。すべてのプログラムは JavaScript で書き直されるだろうと言う人もいます。しかし今日、Python はすでにデータ分析と AI のための最初の言語、ネットワーク攻撃と防御のための最初のハッカー言語、そして入門プログラミング教育のための最初の言語、そしてクラウド コンピューティング システム管理のための最初の言語になりつつあることがわかります。 Python は長い間、Web 開発、ゲーム スクリプト、コンピュータ ビジョン、IoT 管理、ロボット開発の主流言語の 1 つとなっており、Python ユーザーの増加が予想されているため、複数の分野でトップに上り詰める可能性があります。
そして、将来の Python ユーザーの大多数はプロのプログラマーではなく、現在も Excel、PowePoint、SAS、Matlab、およびビデオ エディターを使用しているユーザーになることを忘れないでください。 AI を例に挙げると、まず、AI の主要なグループはどこにあるのかを尋ねる必要があります。今日、このトピックについて静的に話すと、AI の主力は研究機関の AI 科学者、機械学習の専門家、および博士号を取得したアルゴリズムの専門家であると考えるかもしれません。しかし前回、私は Kai-Fu Lee 氏の「AI 配当三段論法」について言及しました。これは、長期的な視野を持ち、3 年から 5 年を振り返る限り、AI 業界の労働力全体が徐々に利益を生み出すだろうということを明確に示しています。巨大なピラミッド構造では、上記の AI 科学者はほんの一部であり、AI 技術者の 95% 以上は AI エンジニア、アプリケーション エンジニア、AI ツールのユーザーになります。これらの人々のほぼ全員が Python に流され、Python 陣営の巨大な予備軍になると私は信じています。これらの潜在的な Python ユーザーはまだ技術界の外にいますが、AI アプリケーションが開発されるにつれて、何百万人もの教師、会社員、エンジニア、翻訳者、編集者、医師、営業、マネージャー、公務員がそれぞれの業界の知識とデータ リソースに囲まれるようになります。この分野は Python と AI の潮流に流れ込み、IT または DT (データ テクノロジー) 業界全体の全体的なパターンと外観を大きく変えています。
なぜPythonは後ろから追いつくことができるのでしょうか?
一般的に言えば、Python の利点としては、シンプルで洗練された言語設計、プログラマの使いやすさ、開発効率の高さなどが挙げられます。しかし、他のいくつかの言語はこれが苦手ではないので、これが根本的な原因ではないと思います。
Python の利点はその豊富なリソース、堅牢な数値アルゴリズム、アイコン、データ処理インフラストラクチャにあり、非常に優れた生態環境を確立しており、さまざまな分野の多数の科学者や専門家がそれを使用するようになっていると考える人もいます。雪だるまのほうが大きいです。しかし、これは原因と結果が逆であると私は考えています。なぜ Python は人々を惹きつけて使用し、これほど優れたインフラストラクチャを構築できるのでしょうか?世界最高の言語である PHP には、なぜ numpy、NLTK、sk-learn、pandas、PyTorch などのライブラリがないのでしょうか? JavaScript が隆盛を極めた後、各種プログラム ライブラリが不均一で役に立たなくなったのに対し、Python の各種プログラム ライブラリは隆盛かつ整然とし、高いレベルを維持できるのはなぜでしょうか。
根本的な理由は 1 つだけだと思います。Python は、多くの主流言語の中で、明確な戦略的位置付けを持ち、常に元の戦略的位置付けを堅持している唯一の言語です。対照的に、あまりにも多くの言語が戦術的かつ無原則な努力を続けて戦略的位置付けを侵食し曖昧にし、最終的にはただ待ち続けることしかできません。
Python の戦略的位置付けは何ですか?実際、それは非常にシンプルで、シンプルで使いやすいが、専門的かつ厳密な汎用結合言語、つまりグルー言語を作成することで、一般の人が簡単に始めて、さまざまな基本的なプログラムコンポーネントを組み立てて操作できるようにすることです。調整された方法で。
まさにこの位置付けを固守しているからこそ、Python は常に独自のトリックよりも言語自体の優雅さと一貫性を、CPU 効率よりも開発者の効率を、そして垂直方向の詳細な機能よりも水平方向の拡張機能を優先しているのです。これらの戦略的選択を長期にわたって継続したことにより、Python には他の言語では真似できない豊かなエコシステムがもたらされました。
たとえば、学びたい人は誰でも Python の基本的な部分を数日で学ぶことができ、その後、この入出力比は他のどの言語にも匹敵するものになるでしょう。別の例として、Python 言語自体が遅いからこそ、頻繁に使用されるコア プログラム ライブラリを開発する場合、それと連携するために C 言語が多用され、その結果、Python で開発された実際のプログラムは非常に高速に動作します。システムが C で書かれたコードを実行する時間は 80% を超える可能性が非常に高くなります。逆に、Python が納得せずに速度で競争することに固執すると、結果的には裸の速度が数倍向上する可能性がありますが、その場合、最終的な速度に対応する C モジュールを開発する意欲は誰もなくなります。おそらく結果として言語はより複雑になり、結果として遅くて醜い言語になるでしょう。
さらに重要なのは、Python のパッケージ化機能、構成可能性、埋め込み可能性が非常に優れており、Python モジュールのさまざまな複雑さをラップし、美しいインターフェイスを公開できることです。多くの場合、プログラム ライブラリ自体は C/C++ で記述されますが、環境設定からインターフェイス呼び出しまで、C または C++ を直接使用してそのプログラム ライブラリを呼び出すのは非常に面倒であることがわかります。代わりに、他の Python パッケージ ライブラリを使用してください。よりクリーンに、より速く、より美しく。これらの特性は、AI の分野における Python の強力な利点となっています。 Python はまた、AI とデータ サイエンスを利用して、プログラミング言語のエコロジカル チェーンの頂点に上り詰めました。電子商取引、検索エンジン、ソーシャル ネットワーク、スマート ハードウェアのいずれであっても、Python は AI と結びついており、将来的にはそれらはすべて、生態系チェーンの下流で単なるデータ牛、電子神経、実行ツールとなるでしょう。彼らの命令に従いなさい。
プログラミング言語開発の歴史を理解していない人は、Python の戦略的位置付けが冷笑的で積極性に欠けていると感じるかもしれません。しかし、事実は、シンプルかつ厳密、使いやすく、同時にプロフェッショナルであることは困難であり、接着言語の位置付けに固執することはさらに難しいことを証明しています。
一部の言語は最初から実用的な目的ではなく学術的な目的であり、学習曲線があまりにも急であるため、一般の人がそれらに近づくのは困難です。一部の言語は、背後にあるスポンサーの商業的支援に依存しすぎているため、優れている場合でも、いったん傍観者に追いやられてしまうと、存続すら困難になります。言語によっては、大規模な同時実行性を解決したり、行列演算を解決したり、Web ページのレンダリング テンプレートを作成したりするための、設計時に明確な想像上のシナリオがあります。このシナリオから離れると、不満を感じることになります。より多くの言語は、少しでも成功を収めるとすぐに、全方位チャンピオンになることを待ちきれず、あらゆる方向に触手を伸ばします。特に表現力の向上とパフォーマンスの向上に関して、過剰に攻撃的になることがよくあります。そして、コア言語を認識を超えて変更することを躊躇しないでください。最終的には、誰も制御できない巨大なものになります。対照的に、Python は最新のプログラミング言語の設計と進化の成功例です。
Python の戦略的位置付けがこれほど明確であり、戦略的永続性が確固たる理由は、結局のところ、Python のコミュニティが模範的な意思決定とガバナンスのメカニズムを構築しているためです。このメカニズムは、Guido van Rossum (BDFL、Pythoners は皆、これが何を意味するか知っています)、DavidBeazley、Raymond Hettinger らを中心としており、民主的で秩序があり、集中化され啓蒙された組織プラットフォームとしての PEP を備えています。仕組み自体が維持される限り、Pythonは今後も着実に成長していくでしょう。
Python に最も挑戦する可能性が高いのは、もちろん Java です。 Java はユーザーベースが大きく、明確かつ確固たる戦略的位置付けを持つ言語でもあります。しかし、Java は本質的に大規模で複雑なシステムを構築するために設計されているため、Java に大きなチャンスがあるとは思えません。大規模で複雑なシステムとは何ですか?それは人々によって明確に記述され構築されるシステムであり、その規模と複雑さは外生的、または外界によって与えられます。 AI の本質は自己学習および自己組織化システムであり、その規模と複雑さはデータから供給される数学的モデルによって生成され、内生的です。したがって、Java の言語構造のほとんどは、ビッグデータ処理や AI システム開発には役に立たず、ここで必要なことは実行できません。 Python のシンプルさとデータ処理能力の高さは、古くから誰もが知っています。同じ機能を持つ Java と Python の 2 つの機械学習プログラムを比較すると、普通の人は 2 回見ただけで判断できます。Python プログラムの方が新鮮で楽しいはずです。
2003 年か 2004 年ごろ、ブラジル人が書いた Python の本を購入しました。彼が断固としてPythonを選んだ理由は、子どもの頃、未来の世界が大きなニシキヘビ(英語でパイソンはpython)に支配されるという夢をよく見ていたからだと語った。こんな凄惨な光景を夢に見るなんて、この人は可哀想だなとその時思った。しかし今見ると、彼は偶然未来に旅して世界の真実を垣間見た『マトリックス』のプログラマー・アンダーソンのような存在だったのかもしれない。