チームに ML を導入させるにはどうすればよいのでしょうか。また、実行している既存のシステムと ML を最適に統合するにはどうすればよいでしょうか。 Java で構築された ML フレームワークは実際には存在しません (DL4J はありますが、それを使用している人を知りません。MXNet は Java ではなく Scala API を持ち、Java で書かれていません。Tensorflow は不完全な Java API を持っています)。しかし、Java は企業で大きな影響力を持っており、過去 20 年間で世界中の金融サービス、トレーディング、電子商取引、通信会社に数兆ドルが投資されてきました。そのリストは無限です。機械学習の場合、「第一候補」のプログラミング言語は Java ではなく Python です。 個人的には、Python と Java でコーディングするのが好きですが、Frank Greco が興味深い質問をして、考えさせられました。 ML で Python と競争するには、Java に他に何が必要ですか? Java が機械学習を本当にサポートすることに真剣に取り組んだらどうなるでしょうか? それは重要ですか? 1998 年以来、Java は、Web、モバイル、ブラウザとネイティブ、メッセージング、i18n と l10n のグローバリゼーション サポート、リレーショナル データベースから Elasticsearch に至るまでのさまざまなエンタープライズ情報ストアの拡張とサポートなど、複数のエンタープライズ変革の最前線に立ってきました。 機械学習業界ではそうではありません。 Java チームが ML に参入する場合、選択肢は 2 つしかありません。
どちらの選択肢もあまり良いものではありません。前者には、多大な先行時間と投資に加えて、継続的なメンテナンス コストが必要です。一方、後者には、ベンダー ロックイン、ベンダーのサポート終了、サードパーティ コンポーネントの導入 (ネットワーク料金の支払いが必要)、パフォーマンスが重要なシステム、組織の境界外でのデータ共有の必要性 (一部の人にとっては避けるべき) などのリスクがあります。
私の意見では、最も損害が大きいのは、文化的な衰退の可能性です。チームは理解できないコードや保守できないコードを変更できず、Java チームはエンタープライズ コンピューティングの次の波である機械学習で遅れをとるリスクがあります。 したがって、Java プログラミング言語とプラットフォームが一流の機械学習サポートを備えていることは極めて重要です。そうでない場合、Java は今後 5 ~ 10 年で徐々に ML をサポートする言語に置き換えられるリスクがあります。 なぜ Python が ML で優位に立っているのでしょうか? まず、なぜ Python が機械学習とディープラーニングの主要な言語であるのかを考えてみましょう。
すべてはリストのスライスのサポートという 1 つの機能から始まったのではないかと思います。このサポートは拡張可能で、__getitem__ メソッドと __setitem__ メソッドを実装する任意の Python クラスをこの構文を使用してスライスできます。次のコード スニペットは、この Python 機能の強力さと自然さを示しています。 a = [1, 2, 3, 4, 5, 6, 7, 8] もちろん、それだけではありません。 Python コードは、古い Java コードに比べて、よりクリーンで簡潔です。未チェック例外のサポートにより、開発者は「すべてがクラスである」という Java の考え方にとらわれずに、ポリフィルを試すための 1 回限りの Python スクリプトを簡単に作成できます。 Python の使い方は簡単です。 しかし、現時点では、主な要因は、Python コミュニティが 2.7 と 3 の連携を維持するのに大苦労した一方で、適切に設計された高速な数値計算ライブラリ (NumPy) の構築に関してははるかに優れた仕事をしたということだと考えています。 Numpy は、N 次元配列オブジェクトである ndarray を中心に構築されています。ドキュメントから直接引用すると、「NumPy の主なオブジェクトは、同種の多次元配列です。これは、すべて同じ型の要素 (通常は数値) のテーブルであり、正の整数のタプルによってインデックス付けされます。」 NumPy ではすべて、データを ndarray に格納し、それに対して操作を実行することです。 NumPy は、さまざまな種類のインデックス作成、ブロードキャスト、速度向上のためのベクトル化をサポートしており、開発者が大規模な数値配列を簡単に作成および操作できるようにします。 次のスニペットは、ML/DL のコア操作である ndarray のインデックス作成とブロードキャストの動作を示しています。 numpyをnpとしてインポートする 大規模な多次元の数値配列の処理は、機械学習コーディング、特にディープラーニングの中心です。ディープ ニューラル ネットワークは、ノードとエッジのグリッドのデジタル モデルです。ネットワークをトレーニングするときやネットワーク上で推論を実行するときのランタイム操作には、高速な行列乗算が必要です。 NumPy により、scipy、pandas、および NumPy に依存する他の多くのライブラリが有効になりました。主要なディープラーニング ライブラリ (Google の Tensorflow、Facebook の PyTorch) は Python に重点的に投資されています。 Tensorflow には Go、Java、JavaScript 用の他の API もありますが、それらは不完全であり、不安定であると考えられています。 PyTorch はもともと Lua で書かれていましたが、2017 年にかなりニッチな言語から主要な Python ML エコシステムに移行したときに人気が急上昇しました。 Pythonの欠点 Python は完璧な言語ではありません。特に、最も人気のある Python ランタイムである CPython にはグローバル インタープリター ロック (GIL) があるため、パフォーマンスのスケーリングは簡単ではありません。さらに、PyTorch や Tensorflow などの Python DL フレームワークでは、コア メソッドが依然として不透明な実装のままになっています。 例えば、NVidiaのcuDNNライブラリはPyTorchをサポートしています 公平に言えば、この不透明性/制限は、C または C++ で書かれていないほぼすべての ML/DL フレームワークに適用されます。なぜ?なぜなら、行列乗算などの高頻度演算においてコアから最大限のパフォーマンスを引き出すために、開発者は「基礎となる冶金学に可能な限り近づく」からです。 Java が競争するには何をする必要がありますか? Java プラットフォームには、次の 3 つの主要な追加機能があり、これらが存在すれば、Java で健全かつ活発な機械学習エコシステムの出現が可能になると思います。 1. Pythonの使いやすさと表現力に匹敵するネイティブなインデックス/スライスのサポートをコア言語に追加する。おそらく、リストのような既存の順序付きコレクションの形で。 インターフェース中心。このサポートでは、ポイント 2 をサポートするために、オーバーロードを認識する必要もあります。 2. Tensor 実装を構築します。おそらく java.math パッケージ内ですが、Collections API にもブリッジされます。このクラスとインターフェースのセットは、ndarray と同等のものとして機能しますが、追加のインデックス サポート (具体的には、フィールド アクセス、基本スライス、ML のコーディングに必要な高度なインデックスの 3 種類の NumPy インデックス) がサポートされます。 3. ブロードキャストをサポートします - 任意の(ただし互換性のある)次元のスカラーとテンソル。 これら 3 つがコア Java 言語とランタイムに存在すれば、NumPy と同等の「NumJava」を構築する道が開かれます。 Project Panama は、CPU、GPU、TPU などで実行される高速テンソル演算へのベクトル化された低レベル アクセスを提供し、Java ML を可能な限り高速化するためにも使用できます。 これらの追加が些細なことだと言っているのではありません。決してそうではありません。しかし、Java プラットフォームにもたらされる潜在的なメリットは莫大です。 次のコード スニペットは、コア言語がスライス構文をサポートし、演算子のオーバーロードに関する現在の制限を尊重しながら、NumPy ブロードキャストおよびインデックス作成の例を NumJava の Tensor クラスで使用する方法を示しています。 //Java ブロードキャスト テンソル 要約する この記事で概説した実用的な出発点から始めると、Web パーサー、永続性パーサー、XML パーサーと同じ数だけ、Java で記述され JRE 上で実行される機械学習/ディープラーニング フレームワークを作成できます。想像してみてください。最先端のコンピューター ビジョン用の畳み込みニューラル ネットワーク (CNN)、シーケンシャル データセット (ビジネスに重要) 用の LSTM などのリカレント ニューラル ネットワーク実装、自動微分化などの最先端の ML 機能をサポートする Java フレームワークを想像できます。これらのフレームワークは、IDE、テスト フレームワーク、継続的インテグレーションなど同じツールを使用する次世代のエンタープライズ グレードのシステムを強化し、実現します。 |
>>: 自動運転トラックの普及が加速しているが、実用化にはどれくらいの時間がかかるのだろうか。
機械が人間の想像力を持てるようにするために、深層生成モデルは大きな進歩を遂げました。これらのモデルは...
1. 機械学習の概要1. 機械学習とは何ですか?機械は大量のデータを分析して学習します。たとえば、猫...
人工知能 (AI) と機械学習は、企業がコアデジタル資産を活用して競争上の優位性を生み出すために役立...
[[283929]] 図: T11 2019 データインテリジェンステクノロジーサミット現在、データ...
メーカーは、競争上の優位性を獲得し、コストを削減し、顧客によりカスタマイズされた体験を提供するために...
[[410932]]会議中にこっそりと携帯電話を見ている時間がバックグラウンド システムによって記...
これは、AI テクノロジーが身元調査業界に革命をもたらし、これまで以上に効率的でコスト効率の高いソリ...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
この記事では、ニューラル ネットワークをトレーニングするときに過剰適合を回避する 5 つの手法を紹介...
これはおそらく、マルチラベル分類のための最も実用的なヒントです。ご存知のとおり、バイナリ分類タスクは...
ブドウを縫うことができる DIY ロボットアームを作りますか? [[428703]]最近、有名な「ハ...
iResearch Instituteが発表したレポートによると、2021年の中国の幹線物流大型ト...
自然言語処理 (NLP) は、人間の言語または人間のような書き言葉、話し言葉、組織化された言語の形式...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...