ニューラルネットワークの活性化関数

>>> 本サイトのTOPはこちら。

こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回はニューラルネットワークという新語が出てきます。パーセプトロンとどう違うのか、また活性化関数とは何かを見てみましょう。

**********

さて、前回まで見てきたパーセプトロンから、ニューラルネットワークへと進化していくわけですが、その前にパーセプトロンをもう一度図示してみましょう。
バイアスが付いた版です。(味のある手描き風)

この時のyの中を数式で見てみましょう。
a = x1*w1 + x2*w2 + b
y = h(a)

aがない方がわかりやすいかもです。
y = h(x1*w1 + x2*w2 + b)

x1とx2から入力値が入り、それぞれの重みであるw1とw2を掛けて総和を取り、バイアスであるbを足す。

その値をh( )という関数で処理をする。
そんな感じの数式になっています。


要は計算した結果をh関数に入れるわけですが、この関数を通過させることで、情報を次のノードに伝えるかどうかを判断させてるわけですね。

するとこのh関数は何かってことですが、
ここで活性化関数と呼ばれるものが登場します。

ここでは代表的な活性化関数であるシグモイド関数を見てみましょう。
まず数式です。

h(x) = 1 / (1 + exp(-x))

上記のexpとはネイピア数のeのことで、2.7182…のアレです。
このシグモイド関数にxから値を入力すると、ある値が出力されます。

どんな値を返すのか、ちょっと見て見ましょう。
まず、このシグモイド関数をpythonで実装してみます。

pythonのインタプリタで実際に動かしてみましょう。

上記のように、ある値を入れると1以下の小数点で返してくれます。
配列で入れれば、配列で返してくれる優れものです。

続いてグラフに表してみましょう。

どうでしょうか。
滑らかな右上がりのグラフが出てきました。

この関数を通すことで、ある閾値よりも上なら1を出力、下なら0を出力させて、次のノードへの情報伝達をコントロールできるんですね。

活性化関数、シグモイド関数は、人工知能・AIをやっていると
必ずでてくるワードなので、しかっりと自分のものにしていきましょう。

スマートスピーカー使ってみる

>>> 本サイトのTOPはこちら。

こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回は一服タイムで、スマートスピーカーについての使用感です。

***********

さて、今回のテーマはスマートスピーカーを使ってみての感想だ。
ちょっと前にGoogle home miniを購入し、しばらく使ってみたのだが、なかなかいい感じだ。

主な用途はBGMとして。最初は無料体験でGoogle play musicを使える。
曲もいろいろあるので、好きな曲を「オッケー グーグル。永ちゃんの曲をかけて」と言えば、矢沢永吉の曲をランダムにかけてくれる。これは便利だ。

止めたい時は、「オッケー グーグル。ストップ」でOK。

アマゾンのAmazon Echo Dotも同時に使ってみたのだが、Google home miniの方がスピーカーの音質がいい。
もちろん、Amazon Echo Dotは自分でチョイスしたスピーカーに接続できるので、その方がいい人はそうすればいい。

ただ、面倒くさがりの人は、最初からそこそこの音質のスピーカーがあった方がいいでしょう。
上位機種なら音質のいいスピーカーが付いているが、1万円オーバーするから、最初の導入編はGoogle home miniかAmazon Echo Dotでしょうね。

Amazon Echoはアマゾンでのリピート購入を音声で対応してるとかどうとか。
これについてはまだ試していないのだが、定期購入しているものが、音声の一言で買えるのは便利かもしれない。

今、スマートスピーカーは2台持っているのだが、Google home miniをメインに使って、Amazon Echo Dotは待機選手扱いだ。
こいつもそろそろ使いこなしてやろうかと思案中。

このスマートスピーカー系は、他にも各社出しているが、LINEが出しているクローバーでしたっけ。
あれもLINEを音声で使えるから、ちょいと気になるところだ。

 

ここら辺は自分の用途にあったものを選択したりで、好みの分かれるところだろう。

当方の用途としては、作業時のBGMなので、音楽かラジオがメイン。
ところが当初、ラジオの掛け方がよくわからなかった。
「オッケー グーグル。ラジオをかけて」で、バッチリと思っていたのだが、かからず。
調べるのも面倒だったので、しばらく放っておいた。

で、先日ネットで検索すると、「オッケー グーグル。ラジコのTBSをかけて。」で、かけられることが判明。(ラジオ局名はそれぞれ好みで)

それからは、この一言で快適なラジオライフを送っている。
普通のラジオよりネットラジオの方がノイズが入らないから、つい使ってしまうんですよね。

個人的には音声認識と自然言語処理の進化を待って、こいつと会話ができるようになるといいのだけど。
それを可能にした方が、一気に市場を独占すると思っている。

だって、便利ですよね。暇な時に話しかければ、いつでも答えてくれるのだから。
「今日のあの件はどうだった」とか、「最近のあの芸能ニュースはどう思う?」とか聞いて、的確な答えが返ってきたらと思うと。

そうしたら、この形状も、もう少しロボットっぽくなるのだろうか。
いずれにせよ、スマートスピーカーは、「ながら族」には必須アイテムになりそうだ。

パーセプトロンはどこまで可能なのか

>>> 本サイトのTOPはこちら。

こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回はパーセプトロンは単体だと、一体どこまで通用するのかを見てみましょう。

*********

さてpythonを使って、AND演算を作り、Numpyの使い方も学んだところで、このパーセプトロンはどこまで作れるのかという問題が出てきます。

いきなりですが、下の真理値表をご覧ください。

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 0

 

これは排他的論理和と呼ばれるもので、この単純な仕組みをパーセプトロン単体でプログラムを組むことができません。
(線形問題は解けるが、非線形問題は解けない、なんて言い方をします)

かつてのAIの歴史で、この単純問題が解けない(実現できない)とのことで、冬の時代を迎えたこともあったようです。

しかし、この問題も工夫をすることでクリアできるんですね。

それが、多層パーセプトロンと呼ばれるものです。
さきほどのパーセプトロンは単体では解けないが、いくつも層を重ねて多層にすることで、解けるようになるんですね。

では、実際にやってみましょう。
まず前回までにAND演算というものが出てきましたが、
ここでNAND演算とOR演算をpythonで組んでいきます。

まずNAND演算の真理値表です。

x1 x2 y
0 0 1
1 0 1
0 1 1
1 1 0

続いて、OR演算の真理値表です。

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 1

 

では、NAND演算のpythonによる実装です。

次に、OR演算のpythonによる実装です。

AND演算も使うので、こちらも載せておきます。

これで論理演算の代表格のゲートが揃いましたね。
この3つのゲートを組み合わせて、さきほど単体のパーセプトロンで解けなかった排他的論理和を解いていきます。

では、pythonで実装です。

pythonのインタプリタで確認してみましょう。
上記の全コードをコピーして、貼り付けてください。
おっと、下記のコードも忘れずに。Numpy を使うので、これを入れないとエラーが出ます。

では、実行してみましょう。
>>> XOR(0,0)
0
>>> XOR(1,0)
1
>>> XOR(0,1)
1
>>> XOR(1,1)
0

さて、どうでしょうか。
排他的論理和の真理値表通りですね。

このように単体のパーセプトロンでも層を重ねることで、複雑な問題も解くことができるようになるんです。

ここから次に出てくるニューラルネットワークへと繋がっていきます。

 

 

Google翻訳の威力

>>> 本サイトのTOPはこちら。

こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回のブログは話題を変えて、ちょっと一服タイムです。

*********

最近、英会話をペラペラレベルまでもっていきたいと思って、いろいろ調べてはいるのだが、ポケトークなんかをポケットに忍ばせて、事あるごとに吹き込んで勉強するのもいいらしいとの情報を得た。
スマホのアプリでも翻訳系はあるらしいのだが、ネットにつながっていないと、うまくいかないとかどうとか。

一応、アプリを検索するとGoogle翻訳というアプリを発見。
インストールして使ってみる。
何でも、ネットにつながらない時用に、オフラインでも訳せる機能もあるらしくて、早速それもインストールしてみた。

実際に使ってみる。
まず、ネットでおなじみの文字入力から。
適当な日本語入れて翻訳してみる。
一発で英文が表示される。その横のスピーカーのボタンを押すと、きれいな声で、英語で読み上げてくれる。
1回目は普通のスピードで。再度ボタンを押すと、ややゆっくりめのスピードで読んでくれるという、親切さ。
すごいぞGoogle翻訳。

で、本番はやっぱり自分の話し声で調べたいでしょうとのことで、マイクのアイコンをタップして、試してみる。

今日の天気は?
How is the weather today?

熊谷駅までどうやって行くの?
How are you going to kumagaya station?

オリンピックの会場はどこ?
where is the Olympic venue?

ちょっと長文もやってみよう。
周りにあった新聞の一言をマイクから吹き込んでみる。
「寝苦しくてもエアコンをつけたくない夜は、ナイトモードを使用すれば、洗浄された自然か風により心地よく過ごすことができる。」

英文が一瞬で表示された。
すごすぎだぞGoogle翻訳。

で、よく見ると「カメラ入力」という項目もある。
そこをタップして、近くにあった新聞の日本語欄をかざしてみると、なんと、カメラからの画像がその部分だけ英語になっている。

ほんまかいな。

日本語の文章がカメラを通すと英語で表示されるなんて。

ちなみに画像を下に載せてみる。
↓これはこのブログの日本語表示されたパソコン画面。

これがアプリの様子。スクリーンショットが取りづらく、曲がってしまったのだが、真ん中の透けた所の文字が英文で表示されているのがわかるだろう。
中段の「すごいぞGoogle〜」の所が、上記と比較しやすい。↓

カメラを微妙に動かすと訳が変わるところをみると、文字認識の機能を使ってるのだろうか。
なので、カメラ位置によって、若干文字が変わって見えるのかと。
あと、前後の文脈の判断によっても変わってくるのかな。
すると、自然言語処理系なんかも使っているのだろうか。

このGoogle翻訳アプリは、最新鋭のテクノロジーがてんこ盛りで詰まっている。
しかも無料という太っ腹。

これだけあれば、海外旅行も行けるんじゃなかろうか。
ネットにつながれば、訳の語彙の量は、ほぼ無限大だろうから。

このアプリは当分離せそうにないですぞ。

深層学習・ディープラーニングを実際に動かしてみよう2

>>> 本サイトのTOPはこちら。

 

こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
さて、お次はpythonのNumpyとよばれるものを少々動かしてみましょう。

*********

Numpyとはpythonで計算式をサクッとやりたい時に、非常に重宝するライブラリイです。
要は複雑な計算を簡単なコードでやってくれる便利もののことです。

まずは下記のコードをpythonのインタプリタで入れてみましょう。

詳細はそれぞれのコメントを見てください。
ここで前回のAND演算のコードです。

上記のコードはそれぞれの入力値が少ないので、簡単に書けますが、
これが10や20あったら大変ですよね。

このNumpyを使えば、配列で計算できるので、記述が簡潔になるんですね。

それでは、さきほどのAND演算をNumpyで書き直してみましょう。

これも詳細はコメントを見てください。
Numpyを使ったので、シンプルでわかりやすくなりましたね。

こいつを実際に動かしてみましょう。

下記のコードをコピーして
pythonのインタプリタ上にペーストします。

では、実行します。

>>> AND(1,1)
1
>>> AND(1,0)
0
>>> AND(0,1)
0
>>> AND(0,0)
0

真理値表通りでしたね。

これからディープラーニングを学んでいくと、Numpyは頻繁に出てきます。
こいつの使い方は、ぜひマスターしてしまいましょう。

深層学習・ディープラーニングを実際に動かしてみよう

>>> 本サイトのTOPはこちら。

 

こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
まず1回目は、深層学習・ディープラーニングを実際に動かしながら、話を進めていきます。

**********

さて、いきなり実装ありなのかと言う声も聞こえてきそうだが、プログラマー的発想で言えば、手を動かしながら解説された方が理解も深まりやすいのではないかと。

あーだ、こーだと理屈を言われるよりも、コードを見せられた方がシックリくるというか。

なので、動かしながら解説していきますね。

まず、ディープラーニングをchainerやTensorFlowなんかのフレームワークから入った人も多いと思います。
その方が楽ですよね。細かい記述をしなくても、簡潔なコードでいろんな処理をできますから、当然です。

しかし、ここは入門編ですから、pythonコードでじっくりと書いていきましょう。
python初心者でも大丈夫でしょう。なんらかのプログラミングコードが書ける人ならへっちゃらです。
但し、全くプログラミングはできないって方は、コードの部分は軽く読み流してください。

まず、ディープラーニングを語る上で大事なのが、「パーセプトロン」と呼ばれるものです。

パーセプトロンとは、「複数の信号を入力し、ひとつの信号を出力する仕組み」といったものです。

図に書くとこんなイメージです。


手書きアプリで書きましたから、なかなか味がありますね。

この時、x1、x2は入力信号。
w1、w2は重みを表しています。
yは出力信号。ここでは0か1を出力させます。

図の丸の部分はニューロンと呼ばれます。
このニューロンでは送られてきた信号の総和が計算され、ある限界値を超えると1を出力します。

単純な仕組みですね。
ここで大事なのが「重み」です。
図ではw1とw2の重みがありますが、この重みが大きいほど、そこの信号が重要になってくるという仕掛けになっています。

これらを踏まえた上で、AND演算と呼ばれるものを実装してみましょう。

おっと、ここでくじけないでください。なんてことないです。0と1をそれぞれ入力して、0か1のどっちかを出力させるだけですから。

まずは表です。真理値表ってやつです。

入力 x1 入力  x2 出力  y
0 0 0
1 0 0
0 1 0
1 1 1

1と1が入力されると1ですが、あとのパターンは全て0が出ますね。
入力のx1とx2に、それぞれの値を入れて、計算した結果が出力yのようになれば正解ってことです。

それでは、いよいよpythonで上記のAND演算の実装です。

まずコードです。

w1、w2の重みにそれぞれ数値を入れます。zzzは限界値ですね。

上記をpythonのインタプリタで実行すると、下記のような結果になります。

真理値表通りですね。
まずは大元になるコードからでした。

パーセプトロンはディープラーニングの根っこの部分なので、この辺をじっくりと理解しながら、徐々に本格的な実装に入りましょぅ。

今回はここまで。

追記
アマゾンのAWS EC2のdeep learningバージョンでGPUを使ってモデルを適合させてみました。
写真はteraterm上でkerasからの操作。バックはTensorFlowです。

やっぱり、GPUは早いですねえ。

 

 

 

 

人工知能・ディープラーニング入門

>>> 本サイトのTOPはこちら。

こんにちは。株式会社マックスネット 人工知能・AI開発チームのIsoです。
今回からこちらのブログで、人工知能をテーマにいろいろな技術的なことや読み物などを書いていきます。乞うご期待。

*********

さて、よく聞く人工知能といっても範囲は広いです。
はっきり言って定義もあいまいなのが現状です。

ここでは、人工知能(AI)と呼ばれる分野の中に、機械学習と呼ばれる分野があり、その中に深層学習・ディープラーニングと呼ばれる分野があるということで話を進めていきましょう。

特に、このブログでは上記の「深層学習・ディープラーニング」にスポットを当てて解説していきます。

では始めましょう。