人工知能チュートリアル(IV):確率論入門

人工知能チュートリアル(IV):確率論入門

このシリーズの前回の記事では、行列と線形代数についてさらに詳しく説明し、JupyterLab を使用して Python コードを実行する方法を学びました。その他の便利なライブラリについても簡単に紹介します。後ほど、確率、理論、コードについて説明します。いつものように、AI に対する理解を深めるトピックについて話し合うことから始めます。

これまでは、技術的な観点からのみ人工知能について説明してきました。 AI 製品がますます普及する中、AI が社会に及ぼす影響を分析する時期が来ています。あなたの応募が人間によって処理され、応募が拒否されたときに拒否の理由などのフィードバックを人間から受け取ることができる求職シナリオを想像してみてください。求職の応募が AI プログラムによって処理される場合、応募が拒否されたときに AI ソフトウェア システムにフィードバックを求めることはできません。この場合、申請の却下が本当に事実のみに基づいた決定であったかどうかさえ確信が持てません。これは、長期的には魔法のような結果だけではなく、説明責任と保証を備えた AI が必要であることを明確に示しています。 (LCTT 翻訳注: 責任とは、主にシステムの意思決定プロセスが透明で説明可能であり、システムの動作に責任があることを保証することを指します。保証とは、システムのパフォーマンス指標と動作に対するコミットメントまたは期待を指します。) 現在、これらの質問に答えようとする研究が数多く行われています。

人工知能の応用は多くの道徳的、倫理的問題も引き起こすでしょう。強力な人工知能(人工汎用知能とも呼ばれる)が誕生するまで待つ必要はない。

同じシナリオで、車が人工知能ソフトウェアによって運転されたらどうなるでしょうか?あなたは車の所有者なので、人工知能ソフトウェアは他の乗客の安全を考慮しなくても、あなたの安全を最優先に考えるべきです。世界中のすべての車がこのようなソフトウェアで制御されたら、どのような大混乱が起こるかは容易に想像できます。さらに、自動運転車の乗客が末期の病気にかかっていると仮定しましょう。したがって、数学的な機械にとっては、歩行者のために乗客を犠牲にするのは論理的です。しかし、これは必ずしも私たち生身の人間には当てはまりません。少し時間を取って、他のシナリオについて考えてみましょう。論理的なマシンと情熱的な人間がどのような決定を下すかを考えてみましょう。

人工知能が完全に機能するようになったときに生じる政治的、社会的、倫理的な問題について議論する書籍や記事は数多くあります。しかし、私たち一般人やコンピュータエンジニアにとっては、すべての本を読む必要はありません。しかし、人工知能の社会的意義は非常に重要であるため、この問題を簡単に無視することはできません。 AI の社会政治的側面を理解するには、AI (強い AI) が私たち全員にどのような影響を与えるかを理解するために、いくつかの映画を見ることをお勧めします。スタンリー・キューブリックの傑作『2001年宇宙の旅』は、超知能を持った存在が私たち人間を見下す様子を描いた最初の映画の一つです。この映画では、人工知能は人間が世界にとって最大の脅威であると信じ、人類を滅ぼすことを決意します。実際、このプロットを探求する映画は数多くあります。偉大な芸術の巨匠スティーブン・スピルバーグ自身が監督した「人工知能」は、人工知能マシンが人間とどのように相互作用するかを探求します。 『エクス・マキナ』という別の映画では、人工知能を備えた機械についてのこのアイデアが詳しく説明されています。私の意見では、これらは AI の影響を理解するために必見の映画です。

最後に、道路を走る車がメーカーごとに異なる自動運転ルールと人工知能を採用していたらどうなるか想像してみてください。これは完全な混乱を招くでしょう。

TensorFlow を使い始める

TensorFlow は、Apache 2.0 ライセンスを使用して Google Brain チームによって開発された無料のオープンソース ライブラリです。 TensorFlow は、人工知能および機械学習プログラムを開発するための重量級のライブラリです。 TensorFlow は、Python に加えて、C++、Java、JavaScript などのプログラミング言語用のインターフェースも提供します。先に進む前に、テンソルについて説明することが重要である。

まず、JupyterLab に TensorFlow をインストールする必要があります。 TensorFlow には、GPU バージョンと CPU バージョンの 2 つのインストール タイプから選択できます。これは主に、システムに適切な GPU があるかどうかによって決まります。 GPU は並列処理を使用して画像処理を高速化する回路です。ゲームやデザインの分野で広く使用されており、人工知能や機械学習のプログラムを開発する際にも欠かせないハードウェアです。しかし残念なことに、TensorFlow は NVIDIA GPU とのみ互換性があります。さらに、CUDA (Compute Unified Device Architecture) と呼ばれる並列コンピューティング プラットフォームをシステムにインストールする必要があります。システムがこれらの要件を満たしている場合は、JupyterLab でpip install tensorflow-gpuを実行して、TensorFlow の GPU バージョンをインストールします。システムの GPU 構成が要件を満たしていない場合、TensorFlow を使用しようとすると、「CUDA_ERROR_NO_DEVICE: CUDA 対応デバイスが検出されません」というエラー メッセージが表示されます。このとき、 pip uninstall tensorflow-gpuを使用して TensorFlow の GPU バージョンをアンインストールします。次に、コマンドpip install tensorflowを実行して、TensorFlow の CPU バージョンをインストールします。これでTensorFlowの準備が整いました。現時点では、CPU と TensorFlow に限定して説明していることに注意してください。

図1: TensorFlowを使用した最初のPythonスクリプト

それでは、最初の TensorFlow を利用した Python コードを実行してみましょう。図 1 は、JupyterLab で実行された単純な Python スクリプトとその出力を示しています。コードの最初の 2 行は、NumPy ライブラリと TensorFlow ライブラリを Python スクリプトにインポートします。ちなみに、Jupyter Notebook のセルに行番号を表示したい場合は、メニューの [表示] > [行番号を表示] をクリックします。 3 行目では、NumPy を使用して、3 つの要素を持つarrという配列を作成します。 4 行目は、配列arrの各要素を 3 倍にして、その結果をtenという変数に格納します。 5 行目と 6 行目は、それぞれ変数arrtenの型を出力します。コードの出力からわかるように、 arrten異なる型です。 7行目は変数tenの値を出力します。 tenの形状は配列arrの形状と同じであることに注意してください。 この例では、整数を表すためにデータ型int64使用されています。これにより、この例では NumPy と TensorFlow のデータ型間のシームレスな変換が可能になります。

TensorFlow は多くの操作と計算をサポートしています。処理されるデータの量が増加するにつれて、これらの操作はますます複雑になります。 TensorFlow は、乗算、減算、除算、累乗、剰余演算などの一般的な算術演算をサポートしています。リストまたはタプルに対して操作を実行する場合、TensorFlow は要素ごとに操作を実行します。

図2: TensorFlowにおける要素ごとの演算

TensorFlow は、論理演算、リレーショナル演算、ビット演算もサポートしています。ここでも操作は要素ごとに実行されます。図 2 は、これらの要素ごとの操作を実行する Python スクリプトを示しています。 1 行目はリストからテンソルを作成し、それを変数t1に格納します。 TensorFlow 関数constant() Python オブジェクト (リスト、タプルなど) からテンソルを作成するために使用されます。同様に、2行目は別のテンソルt2を作成します。 3 行目と 4 行目はどちらも要素ごとの累乗を実行し、出力を印刷します。図 2 から、累乗の結果が同じであることがはっきりとわかります。 5 行目は、テンソルt1t2の要素を比較し、結果を出力します。出力の[True True False]それぞれ3>2、4>3、2>6の結果に対応します。 6行目にも同様の出力があります。

図3: TensorFlow行列乗算

図 3 は TensorFlow 処理マトリックスの例を示しています。 1 行目と 3 行目ではそれぞれ 2 つの行列xyを構築し、2 行目と 4 行目ではそれぞれ行列xyの形状を出力します。コードの出力は、 xの形状が(3,3)であり、 yの形状が(3,)であることを示しています。このシリーズの前半で紹介した行列の知識から、これら 2 つの行列を掛け合わせることはできないことがわかります。

したがって、5 行目では行列yが 1 次元増加します。 6行目では行列yの形状が再度出力され、出力結果は(3,1)になります。これで行列xyを乗算できるようになりました。 7 行目では、行列が乗算され、出力されます。同様の操作はテンソルに対しても実行でき、テンソルの次元が高い場合でも TensorFlow は適切にスケーリングされることに注意してください。このシリーズの今後の記事では、TensorFlow でサポートされているデータ型やその他の複雑な操作について詳しく説明します。

TensorFlow を紹介したので、Keras についても触れておく必要があると思いました。 TensorFlow 用の Python インターフェースを提供します。次回の記事では、Keras について具体的に紹介します。

Nvidia 以外の GPU のパワーをどのように活用すればよいでしょうか?これを実行できる強力なソフトウェア パッケージは数多くあります。たとえば、PyOpenCL は Python で並列プログラムを記述するためのフレームワークです。 OpenCL (オープン コンピューティング言語) を使用できるようになります。 OpenCL は、AMD、Arm、NVIDIA などのメーカーの GPU と対話できます。もちろん、Numba などの他のオプションもあります。コード実行中に Python コードをマシン コードにコンパイルする JIT コンパイラです。 GPU が利用可能な場合、Numba はコードが GPU の機能を使用できるようにします。図 4 は、Numba を使用した Python コードを示しています。

関数fun()には並列化を可能にする機能があることがわかります。図 4 からわかるように、コードは Numba の有無にかかわらず同じ答えを出します。しかし、実行にかかる時間が異なることがわかります。 Numba を使用してコードを並列化すると、かかる時間は半分以下になりました。さらに、問題のサイズが大きくなるにつれて、並列化バージョンと非並列化バージョンにかかる時間の差も大きくなります。

図4: Numbaを使用した並列化

SymPyを使い始める

SymPy は、シンボリックコンピューティング用の Python ライブラリです。図 5 の例を使用して、記号計算とは何かを理解してみましょう。積分を計算するために、SymPy が提供するIntegral()関数を使用します。図 5 には、このシンボリック計算の出力も示されています。 SciPy が提供するintegrate()関数は数値結果を返しますが、SymPy のIntegral()関数は正確な記号結果式を提供できることに注意してください。 SymPy は、人工知能や機械学習プログラムの開発で使用される統計演算を実行するのに非常に役立ちます。

図5: 記号計算の例

このシリーズの次の記事では、Theano について説明します。 Theano は、数式を評価するための Python ライブラリおよび最適化コンパイラです。

確率論入門

次は、人工知能と機械学習におけるもう一つの重要なトピックである確率論について説明します。確率論の詳細な議論はこのシリーズの範囲を超えています。先に進む前に、「確率」、「ベイズの定理」、「標準偏差」に関する Wikipedia の記事を読んで、確率、独立した事象、相互に排他的な事象、条件付き確率、ベイズの定理、平均、標準偏差などの重要な用語と概念に慣れることを強くお勧めします。これを学習すると、その後の確率に関する議論が簡単に理解できるようになります。

確率分布から始めましょう。 Wikipedia によると、「確率分布とは、実験においてさまざまな結果が発生する確率を与える数学的関数です。」さて、確率分布関数とは何かを理解してみましょう。最も有名な確率分布関数は正規分布であり、偉大な数学者ガウスにちなんでガウス分布とも呼ばれます。正規分布関数のグラフは釣り鐘型の曲線になります。図 6 はベル曲線の例です。ベル曲線の正確な形状は、平均と標準偏差によって決まります。自然現象を分析してベル曲線を理解してみましょう。インターネットによると、中国人男性の平均身長は約1.7メートルだそうです。私たちの周りの男性のほとんどはこの身長に非常に近いです。身長が 1.4 メートル未満または 2 メートルを超える男性を目にする可能性は低いです。 100 万人の身長を記録し、横軸に身長、縦軸にその身長の人の数をとって結果をプロットすると、結果として得られるグラフは、わずかな傾きと曲がりがあるベル曲線に近いことがわかります。したがって、正規分布は自然現象の確率的特性を容易に捉えることができます。

図 6: ベル曲線 (画像出典: Wikipedia)

ここで、正規分布を使用した例を見てみましょう。図 7 のコードでは、NumPy の正規分布のnormal()関数を使用し、プロットに Matplotlib を使用しています。 3 行目から、サンプル サイズが 1000 であることがわかります。 4 行目は 1000 個のビンを持つヒストグラムを描画します。しかし、図 7 のベル曲線は、図 6 のベル曲線とは大きく異なります。その理由は、サンプルサイズがわずか 1000 だからです。より鮮明な画像を得るためには、サンプル サイズを十分に大きくする必要があります。 3行目をsample = normal(size=100000000)に置き換えて、プログラムを再度実行します。図 8 は、より良好なベル型曲線を示しています。今回は、サンプル サイズは 100,000,000 で、ベル曲線は図 6 に示すものと非常に似ています。正規分布とベル曲線はほんの始まりに過ぎません。次の記事では、他のイベントや自然現象に一般化できる確率分布関数について説明します。次回は、このトピックについてより正式に議論する予定です。

図7: ベル曲線のプロット

これでこの記事は終わりです。次の記事では、確率と統計のいくつかの概念について引き続き探っていきます。また、人工知能、機械学習、データ サイエンス プログラムの開発に特に役立つ科学計算用の Python ディストリビューションである Anaconda をインストールして使用します。前述したように、人工知能と機械学習の分野で頻繁に使用される Theano という別の Python ライブラリについても学習します。

図8: より優れたベル曲線

<<:  コーディングが ChatGPT を圧倒します! UIUCと清華大学が共同で7BパラメータのMagicorderをリリース、コードデータの重みは完全にオープンソース

>>:  「AIGC+」|新たなマーケティングパラダイム:AIGCは海外進出企業にとって「新たな武器」となり得るか?

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

テキストからキーワードを抽出するにはどうすればいいですか? Daguan Dataが使用する3つのアルゴリズムから始めましょう

導入自然言語処理の分野では、膨大なテキストファイルを処理する上で、ユーザーが最も関心を持っている問題...

...

ドローンは5G開発をフィードバックし、インテリジェントな運用と保守の新たなアップグレードを促進する

近年、民生用ドローンの急速な発展と5G商用化の段階的な深化に伴い、ドローンと5Gの関係はますます密接...

Python のアンサンブル学習とランダム フォレスト アルゴリズムを 10 分でマスターする

導入機械学習モデルは、複数の業界にわたる意思決定プロセスの不可欠な要素となっていますが、ノイズの多い...

公正な「データアクセス」の新秩序の構築 AIが都市統治に根付く

最近では、AI テクノロジーがさまざまな業界に大きな影響を与えていることがニュースで頻繁に紹介されて...

AIはいかにして「医療の神様」となったのか?

[[236501]] 「彼はただ生き残りたいだけ。どんな罪を犯したのか?」黄茂さんが亡くなった後、...

...

Byteチームは、認知生成リストSoTAを理解するためのマルチモーダルLLMであるLynxモデルを提案しました。

GPT4 などの現在の大規模言語モデル (LLM) は、画像が与えられた場合にオープンエンドの指示...

...

Facebook の応用機械学習チームを訪問: 研究と応用の間に橋を架けるにはどうすればよいでしょうか?

Facebook では、応用機械学習チームがソーシャル ネットワークの視覚、会話、理解を支援してお...

人工知能1年後:パンデミックはテクノロジーの発展にどのような影響を与えたのでしょうか?

[[389010]]消費者の行動が変化し、企業の業務ニーズが変化するにつれて、人工知能は徐々に企業...

同じプレフィックスとサフィックスを持つファイルを同じディレクトリに移動するためのアルゴリズム設計と C コードの実装

1. 要件の説明Linux システムの複数のディレクトリに、同じプレフィックスとサフィックスを持つフ...

2021年に注目すべき5つのAI関連の仕事スキル

困難な一年であったにもかかわらず、世界中の多くの企業が、ビジネスを最大化するために人工知能(AI)を...

AIとコグニティブコンピューティングがIoTデータを理解

今日、世界中がインダストリー4.0とそれがもたらすテクノロジーに注目しています。人工知能 (AI) ...

この敵対的アルゴリズムは顔認識アルゴリズムを失敗させ、WeChatやWeiboの写真圧縮にも抵抗できる。

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...