Chainerをインストールし、mnistの実行ができた!
……が、Pythonと機械学習の初心者である私にはmnistの中身を解読することができませんでした。。

そんな私が最初に解読したコードを載せます。
以下のサイトのコードを微修正したものです。
http://qiita.com/carat_yoshizaki/items/bfe559d1bdd434be03ed
import chainer
import math
import numpy as np
import chainer.functions as F
import chainer.links as L

class MyChain(chainer.Chain):
def __init__(self):
super(MyChain, self).__init__(
l1 = L.Linear(1, 100),
l2 = L.Linear(100, 30),
l3 = L.Linear(30, 1)
)

def predict(self, x):
h1 = F.relu(self.l1(x))
h2 = F.relu(self.l2(h1))
return self.l3(h2)

x, y = [], []
for i in np.linspace(-3,3,100):
x.append([i])
y.append([math.sin(i)])

x = chainer.Variable(np.array(x, dtype=np.float32))
y = chainer.Variable(np.array(y, dtype=np.float32))

model = MyChain()

def forward(x, y, model):
t = model.predict(x)
loss = F.mean_squared_error(t, y)
return loss

optimizer = chainer.optimizers.Adam()
optimizer.setup(model)

for i in range(0,1000):
model.zerograds()
loss = forward(x, y, model)
loss.backward()
optimizer.update()
print loss.data
以下、説明していきます。
import chainer
import math
import numpy as np
import chainer.functions as F
import chainer.links as L
C言語で言うところのinclude文。
asは別名をつける場合に使います。
class MyChain(chainer.Chain):
def __init__(self):
super(MyChain, self).__init__(
l1 = L.Linear(1, 100),
l2 = L.Linear(100, 30),
l3 = L.Linear(30, 1)
)

def predict(self, x):
h1 = F.relu(self.l1(x))
h2 = F.relu(self.l2(h1))
return self.l3(h2)
ネットワークを定義したクラス。
class MyChain(chainer.Chain)はMyChainクラスがChainクラスを継承していることを表します。
必須ではないが、基本的にはChainクラスを継承してネットワーククラスを定義するようです。

__init__はコンストラクタ。
selfはPythonのメンバ関数では必ず一つ目の引数として指定するものらしいです。C++で言うところのthis。
superは親クラスを表します。

l1~l3はネットワークのリンク構造を表しています。
Linear(a, b)は、a個の入力をb個の出力に変換する1層のネットワークを示しており、数式で表すとu=Wx+bとなります。
ここで、xは入力(a列のベクトル)、Wは重み行列(a列b行の行列)、bはバイアス(b列のベクトル)、uは出力(b列のベクトル)です。
この例は3層のネットワークであり、1個の入力→100個の出力→30個の出力→1個の出力という形で、1個の入力から1個の出力を生成します。

reluは活性化関数LeLU。
x, y = [], []
for i in np.linspace(-3,3,100):
x.append([i])
y.append([math.sin(i)])

x = chainer.Variable(np.array(x, dtype=np.float32))
y = chainer.Variable(np.array(y, dtype=np.float32))
ここでは正解データを生成しています。
linspace(a, b, c)は[a, b]をc分割してサンプリングする関数、append()はリストへの追加を行う関数です。
下2行のようにnumpyのarrayを経由してChainer用のリストを生成するのが作法のようです。
model = MyChain()

def forward(x, y, model):
t = model.predict(x)
loss = F.mean_squared_error(t, y)
return loss

optimizer = chainer.optimizers.Adam()
optimizer.setup(model)
モデル、順伝播関数、最適化モデルの設定をしています。
モデルは先ほど定義したMyChainクラス。
順伝播関数は順伝播を行い、そのコストを返します。コスト関数には平均二乗誤差を用いています。
最適化モデルにはAdamというアルゴリズムを採用しています(説明省略)。
for i in range(0,1000):
model.zerograds()
loss = forward(x, y, model)
loss.backward()
optimizer.update()
print loss.data
学習処理です。
zerograds()で勾配を0に初期化し、forward()で損失関数を計算します。
lossはVariable型であり、backward()を呼ぶと、誤差逆伝搬法によって勾配を計算します。
そして、optimizer.update()によって、重みとバイアスを更新します。
なお、この一連の処理は以下のように置き換えることができます。
optimizer.update(forward, x, y, model)

以上です。