このシリーズでは、確率と統計の概念を引き続き紹介していきます。
このシリーズの 、AIや機械学習アプリケーションを開発するための非常に強力なライブラリであるTensorFlowの使い方の紹介から始まりました。その後、確率論について説明し、この後の議論の土台を築きました。このシリーズでは、確率と統計の概念を引き続き紹介していきます。
この記事ではまず、科学計算のためのPythonディストリビューションであるAnacondaを紹介します。特に、人工知能、機械学習、データサイエンスのためのプログラムを開発するのに便利です。Theanoと呼ばれるPythonライブラリについては後で紹介します。しかしここでは、AIの未来について説明しましょう。
記事を見直し、修正する中で、AIの将来性について時折懐疑的な論調を用いたり、いくつかのトピックについて率直な意見を述べたりしたことが、不注意にも一部の読者に否定的な感情を抱かせてしまったかもしれないことがわかりました。
これをきっかけに、金融の観点からAIと機械学習について調べ始めました。私は、AI市場に関わる企業の種類を見極めたいと思いました。それとも、AIを推進しようとしている新興企業が数社あるだけなのでしょうか?これらの企業は今後、AI市場にどれくらいの資金を投資するのでしょうか?数百万ドルなのか、数十億ドルなのか、それとも数兆ドルなのか?
インドのビジネススタンダードは2022年に、インド企業の87%が今後3年間でAIへの支出を10%増やすと報告しています。全体として、AIの未来は非常に安全で明るい。 意外なことに、AIに投資しているアマゾン、メタ、アルファベット、マイクロソフト、IBMなどの一流ハイテク企業以外に、シェル、ジョンソン・エンド・ジョンソン、ユニリーバ、ウォルマートなどの非ITハイテク企業もAIに大々的に投資しています。
数多くの世界的大企業が、近い将来AIが重要な役割を果たすと考えていることは明らかです。しかし、これからの変化や新しいトレンドは何なのでしょうか?ニュース記事やインタビューを通して、いくつかの答えを見つけました。AIの今後の動向という文脈でよく言及されるのは、量子AI、AI IoT、AIと倫理、自動機械学習などです。これらはいずれも深く掘り下げるべきトピックであると私は考えており、前回の記事でAIと倫理について説明しましたが、その他のトピックのいくつかについては、次回の記事で詳しく説明する予定です。
Anaconda
shasum -a 256 Anaconda3--Linux-x86_64.sh
a7c0afe862f6ea1fc138bde0463abcbce1bca2db2d Anaconda3--Linux-x86_64.sh
bash Anaconda3--Linux-x86_64.sh
Enterを押した後、下にスクロールしてユーザー同意書を表示し、同意します。最後に、yes と入力してインストールを開始します。ユーザーインタラクションのプロンプトが表示されたら、通常は Anaconda のデフォルトオプションを使用するだけです。これで Anaconda がインストールされました。
デフォルトでは、Anaconda はパッケージマネージャと環境管理システムである Conda をインストールします。Anaconda ディストリビューションは 250 以上のパッケージを自動的にインストールし、オプションで 7,500 以上のオープンソースパッケージを追加インストールします。また、Anaconda を使用してインストールされたパッケージやライブラリは、Jupyter Notebook で使用することができます。新しいパッケージがインストールされると、Anaconda は依存関係の更新を自動的に処理します。
ここまでくれば、ようやくパッケージやライブラリのインストールを気にする必要がなくなり、AIや機械学習プログラムの開発を続けることができます。Anaconda にはコマンドラインインターフェイスしかないことに注意してください。幸運なことに、インストールには Anaconda のグラフィカルユーザーインターフェイスである Anaconda Navigator が含まれています。ターミナルで anaconda-navigator コマンドを実行して Anaconda Navigator を実行してください。
Theano
Theano は数式計算のために最適化されたコンパイル済み Python ライブラリです。Anaconda Navigator に Theano をインストールするのはとても簡単です。Anaconda Navigator を開き、" " ボタンをクリックします。開いたウィンドウに、現在インストールされているパッケージの一覧が表示されます。上部のドロップダウンリストから " " オプションを選択します。下にスクロールして Theano を見つけ、左側のチェックボックスにチェックを入れます。ウィンドウの右下隅にある緑色の " " ボタンをクリックすると、Anaconda は Theano をインストールするためのすべての依存関係をポップアップメニューに表示します。図 2 は、Theano をインストールした際のポップアップメニューです。Theano に加えて、新しいパッケージがインストールされ、8 つのパッケージが変更されていることがわかります。
Theano を手動でインストールするのがどれほど面倒か想像してみてください。Anaconda を使えば、いくつかのボタンをクリックするだけです。しばらく待つだけで Theano がインストールされます。これで Jupyter Notebook で Theano を使えるようになります。
記号計算のためのPythonライブラリSymPyにはすでに馴染みがあると思いますが、Theanoは記号計算を次のレベルに引き上げます。図3はTheanoの使用例です。最初の行はTheanoをインポートしています。 2行目はtheano.tensorをインポートしてTと名付けています。
数学的には、テンソルは多次元配列と考えることができます。テンソルは、スカラー、ベクトル、行列、テンソルなどを格納して操作するためのTheanoの主要なデータ構造の一つです。3行目では、関数function()がTheanoからインポートされています。4行目では、pp()というTheano関数をインポートしています。5行目では、xというdouble型のスカラー・シンボリック変数を作成しています。シンボリック変数の概念を理解するのは難しいかもしれません。ここでは、double型のオブジェクトで、特定の値がバインドされていないものと考えてください。同様に、6行目では y という別のスカラー型シンボリック変数を作成しています。7行目はPythonインタプリタに、シンボリック変数xとyの値を加算し、値を取得したらaに格納するように指示しています。
記号操作をさらに説明するために、出力が(x+y)となっている8行目をよく見てください。これは2つの数値の実際の足し算がまだ行われていないことを示しています。9行目から11行目も同様に、それぞれ記号的な引き算、掛け算、割り算を定義しています。b、c、dの値は関数pp()を使って自分で求めることができます。12行目が重要です。これはTheanoのfunction()関数を使用して、f()という新しい関数を定義しています。 f()の入力はxとyで、出力は[a b c d]です。最後に、13行目で関数f()に実際の値を与えて呼び出します。この操作の出力も図3に示されています。この出力が正しいことを確認するのは簡単です。
図4のコードを見て、Theanoで行列を作成して操作する方法を見てみましょう。インポートのコードを省略していることに注意してください。図4のコードを直接実行したい場合は、インポート行を自分で追加する必要があります。ここでは、一度に複数の行列を作成できるimatricesを使用しています。2行目から4行目までは、それぞれシンボリック行列xとyに対してシンボリック加算、減算、乗算を行っています。ここでは、print(pp(a))、print(pp(b))、print(pp(c))を使って、記号演算の性質を理解することができます。5行目では、入力が2つの記号行列xとyで、出力が[a b c]の関数f()を作成しています。最後に、6 行目で、関数 f() に実際の値を与えて呼び出します。この操作の出力も図4に示されています。示された3つの出力行列が正しいことを確認するのは簡単です。スカラーと行列に加えて、テンソルもベクトル、行、列型のテンソルのコンストラクタを提供することに注意してください。
さて、確率論と統計の話に移ります。前回の投稿では、ウィキペディアの記事を3つ熟読することを提案し、正規分布について紹介しました。人工知能や機械学習プログラムの開発を始める前に、確率論と統計学の基本概念を復習しておく必要があります。最初に紹介するのは「と」です。
算術平均は、数値の集合の平均と考えることができます。標準偏差は、数値の集合の分散と考えることができます。標準偏差が小さければ、集合の要素が平均に近いことを意味します。逆に標準偏差が大きい場合は、集合の要素が広い範囲に広がっていることを意味します。Pythonを使って算術平均と標準偏差を計算するには?Pythonには平均と標準偏差を求めるのに使えるstatisticsというモジュールがあります。しかし、熟練したユーザはこのモジュールが遅すぎると感じ、NumPyを選択します。
図5に示すコードは、2つのリストC1とC2の平均と標準偏差を表示します。これらの値から何がわかるでしょうか?今のところ、あなたにとってはただの数字です。では、これらのリストにはそれぞれA校とB校の6人の生徒の数学のテストの点数が含まれていることを教えましょう。平均値から、両校の生徒の平均的な成績は悪かったが、B校の成績はA校より少し良かったことがわかります。標準偏差は何を物語っているのでしょうか? B校の大きな標準偏差は平均値の下に隠れていますが、明らかにB校の指導の失敗を反映しています。さらに理解を深めるために、C1 =[,] と C2 =[,] という2つの値のリストをあげます。この例は、問題の複雑さに対処するためには、より複雑なパラメータが必要であることを明確に示しています。確率統計学は、複雑で厄介なデータを記述するために、より洗練されたモデルを提供します。
乱数生成は確率論の重要な部分です。しかし、実際に生成できるのは擬似乱数だけです。擬似乱数列は、真の乱数列に近似した性質を持ちます。擬似乱数を生成するためのいくつかの関数を図6に示します。1行目はPythonのrandomパッケージをインポートしています。2行目は2つの乱数を生成し、new_listというリストに格納します。random.random()という関数が乱数を生成するところでは、 new_list = [random.random() for i in range(2)] コードはPythonの構文を使っています。3行目はこのリストを出力します。出力される2つの乱数はコードが実行されるたびに変化し、同じ数値が2回連続して出力される確率は理論的には0であることに注意してください。図6の2番目のコードユニットはrandom.choice()関数を使用しています。この関数は、与えられた選択肢から同じ確率でデータを選択します。コードスニペット random.choice(["Heads", "Tails"]) は、「表」と「裏」を同じ確率で選択します。このコードもリスト導出を使っていることに注意してください。図6の出力からわかるように、3回とも "Tails "が選択されています。
ここで、確率論でよく知られていることを簡単な例を使って説明します。大数の定理は、多数の試行から得られた結果の平均は期待値に近いはずであり、試行回数が増えるにつれてこの平均は期待値に近づいていく、というものです。ご存知のように、偶数のサイコロを投げて6が出る確率は1/6です。 この実験を図7のPythonコードでシミュレーションしてみましょう。1行目はPythonのrandomパッケージをインポートしています。2行目は繰り返しの試行回数を1000回に設定します。3行目はカウンタctを0に初期化します。4行目は1000回繰り返すループです。5行目のrandom.randint(1, 6)は1から6の間のランダムな整数を生成します。そして、生成された数値が6に等しいかどうかをチェックします。等しい場合、7行目に進み、カウンタctを1増やします。ループを1000回繰り返した後、8行目に試行回数の合計に対する6の数値の比率を表示します。図7を見ると、この比率は0.179であり、期待値である1/6 = 0.1666...よりもわずかに高いことがわかります。それでも期待値との差は比較的大きい。2行目のnの値を10000に設定し、コードをもう一度実行して、出力されたものを観察してください。期待値に近い数値が得られるでしょう。2行目のnの値を増やし続けると、出力が期待値に近づいていくのがわかるでしょう。
大数の定理の説明は平易ですが、どの数学者が大数の定理を証明したのか、あるいは元の証明を改良したのかを知ると驚きます。カルダノ、ヤコブ・ベルヌーイ、ダニエル・ベルヌーイ、ポアソン、チェビシェフ、マルコフ、ボレル、カントリ、コルモゴロフ、チンチンなどなど。これらはすべて、それぞれの分野における数学の巨人たちです。
を経由して





