深層学習ことはじめ その5

これから数回にわたって深層学習についての記事を書きます.ひとまとめに長文としたものを数回に分けて紹介していきます.初学者向けです,何かの参考になれば.前回の記事に引き続き,基礎的な計算の中身を追いかけていきます.

******

これがNumpyでこれを行う方法の例です。
def y2indicator(y):
N = len(y)
ind = np.zeros((N, 10))
for i in xrange(N):
ind[i, y[i]] = 1
return ind

この記事では、CSVをNumpy配列またはPandasデータフレームにロードする方法をすでに知っていることと、Numpy配列の乗算や加算などの基本的な操作を行うことをあなたがすでに知っていると思います。 機械学習に慣れていない人の多くは、「すべてのデータが同じ」ということを理解していません。彼らは「X」を見て、これは抽象的すぎると思います。 「X」は一連の画像とどのように関連していますか。 「X」はeコマースデータとどのように関連していますか?この記事で「X」を扱う方法、つまり各サンプルが行に沿っており、各機能が列に沿っている2次元配列としては、機械学習では標準的な方法です。 「特徴」とは、画像の1ピクセルのこともあれば、顧客の年齢のこともあります。それはどうでもいい事です。すべてのデータは同じです。ニューラルネットワークは、あなたのデータが画像であるのか、それともあなたの顧客のWebブラウジング習慣であるのかを気にしません。ニューラルネットワークのアルゴリズムは変わりません。人工ニューラルネットワークのアーキテクチャ任意の1つのニューロンを他の任意のニューロンに接続できる生物学的ニューラルネットワークとは異なり、人工ニューラルネットワークは非常に特殊な構造をしています。特に、それらはレイヤーで構成されています。

各層は次の層に入ります。 「フィードバック」接続はありません。ニューラルネットワークが第1章でどのようになっているか、およびロジスティック単位の出力を計算する方法をすでに見たことがあります。 1章の隠れ層ニューラルネットワークがあるとします(xは入力、zは隠れ層、yは出力層です)。フィードフォワードアクションyの式を完成させましょう。まず、z 1とz 2を計算する必要があります。
z1 = s(w11 * x1 + w12 * x2)z2 = s(w21 * x1 + w22 * x2)
ここでs()は任意の非線形関数になります(線形の場合はロジスティック回帰を実行するだけです)。最も一般的な3つの選択肢は、
1:シグモイド関数
def sigmoid(x):
return 1 /(1 + np.exp(-x))
2、双曲線正接:np.tanh()双曲線正接はシグモイドの単なる拡大縮小バージョンです。シグモイドは0を中心にしているため、シグモイドよりも優先されます。
3、ReLU:
def relu(x):
if x < 0:
return 0
else:
return x

以下の代替の書き方reluが正しいことを自分自身に証明してください。
def relu(x):
return x *(x> 0)
この後者の形式は、Theanoのような目的関数の勾配を自動的に計算するライブラリで必要です。 Theanoの最近のバージョンにはT.nnet.reluを介して組み込まれたrelu関数が含まれています。最後に、yは次のように計算できます。
y = s'(v1 * z1 + v2 * z2)
次のセクションで説明するように、s'()はシグモイドまたはソフトマックスにすることができます。シグモイド関数の内部には、入力と重みの間に「内積」があるだけです。 forループの代わりにNumpyでベクトル演算と行列演算を使用する方が計算上効率的であるため、可能な場合はこれを試みます。これは、ベクトル化形式でReLUとsoftmaxを使ったニューラルネットワークの例です。
def forward(X, W, V):
Z = relu(X.dot(W))
Y = softmax(Z.dot(V))
return Y

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です