
Outline
機械学習とは何か(ついでにsin(θ)を人工知能で計算)
「機械学習」についての私の理解を示します。ついでにsin(θ)を「人工知能」を使って計算してみたいと思います。
機械学習とは何か
私の理解
機械学習は、人工知能を実現する手段の一つです。
従来の人工知能(=シンボリックAI)は、説明可能性を重視し、演繹的(論理学的)アプローチを取っていました。しかし、そのアプローチは、限界にぶつかっていました。シンボリックAIでは、コンピュータにアルゴリズムやルールを教える必要がありますが、対象分野によっては、アルゴリズムやルールを見つけることが難しいためです。
それに対し、機械学習は、説明可能性を一定程度あきらめ、帰納的(統計学的)アプローチを取り入れました。すなわち、コンピュータにデータ(=サンプルデータ)を与え、データの統計学的処理(=訓練)を重ねさせ、経験的に妥当なモデルを作らせることにしたのです。
人間は、データを用意し、学習効果を測定する基準を考え、モデルの枠組み(=仮説)を構築します。仮説が構築できたら、コンピュータに訓練を実行させ、モデルを完成させます。訓練が終わったら、基準に照らし、学習効果(=モデルがどれだけ表現力を身に付けたか)を測定します。測定結果を検証し、パラメータのチューニングを行います。モデルが十分な表現力を得るまで、リソースと相談しつつ、一連のサイクルを繰り返します。
モデルが十分な表現力を得たと判断できたら、アプリケーションに組み込み、現実世界の問題を解くのに利用します。
なお、機械学習には、線形回帰、ロジスティック回帰、サポートベクターマシン、ランダムフォレスト等の技術があります。それらのクラシカルな機械学習と比べ、より説明可能性をあきらめた(=帰納的アプローチの度合いを高めた)のが、ディープラーニングです。ディープラーニングは、機械学習の対象分野を広げることに成功しました。
機械学習は、帰納的アプローチをとる関係上、多くのリソースを必要とします。訓練では、データ量と訓練回数、モデルの複雑さに応じ、消費するリソースが増大します。仮説の検証を何度も繰り返せば、さらにリソースが増大します。すなわち、多くのマシンパワー(空間)を使うか、多くの時間を使うかとなります。
ディープラーニングでは、特に多くのリソースを消費します。クラシカルな機械学習で済むなら済ませるべきだし、そもそも、本当にアルゴリズムやルールを見つけることができないか、一度は考えてみるべきです。
反省
以上のように理解しましたが、以下の点を反省します。
- 統計学は、むしろ説明のための学問である。説明可能性をあきらめて統計学的アプローチを取り入れた、という表現には違和感を感じる。単に、統計学で利用している数学とアルゴリズムを、取り入れただけではないか。
- 果たして、ディープラーニングは説明可能性をあきらめてしまったのか。それは2018年夏現在の状況を示しているだけで、近い将来、説明可能性を獲得するのではないか。
参考文献、参考サイト
- François Chollet著(2017)、クイーブ訳(2018)『PythonとKerasによるディープラーニング』マイナビ出版
- Drew Conway(2010)『The Data Science Venn Diagram』
- 丸山宏『演繹から機能へ 〜新しいシステム開発パラダイム〜』
- 丸山宏「機械学習工学に向けて」『機械学習型システム開発へのパラダイム転換』国立研究開発法人科学技術振興機構 研究開発戦略センター
-
Tom Mitchell(1998)による定義
- コンピュータプログラムが、ある種のタスクTと評価尺度Pにおいて、経験Eから学習するとは、タスクTにおけるその性能をPによって評価した際に、経験Eによってそれが改善されている場合である
- 佐伯竜輔(2018)『AIブームを支える「機械学習」~AIの現実的な始め方とは?』DB Press
-
Arthur Samuel(1959)による定義
- 機械学習とは「明示的にプログラムしなくても学習する能力をコンピュータに与える研究分野」である
- Wikipedia『Symbolic artificial intelligence』
sin(θ)を人工知能に計算させる
さて、それでは、以下四つのアプローチで、sin(θ)を計算させてみたいと思います。
- 幾何学的計算
- 解析学的計算
- クラシカルな機械学習による計算
- ディープラーニングによる計算
動作確認は、以下環境で行なっています。
- Python 3.6.4
- tensorflow 1.9.0
- Keras 2.2.0
また、以下の記事に従い、毎回%matplotlib inline
と書かなくて良いように設定済みであるとします。
幾何学的計算
従来の人工知能(=シンボリックAI)のアプローチで、sin(θ)を計算させてみましょう。そのためにはコンピュータにアルゴリズムを教える必要があります。アルゴリズムは、プログラミングすることにより、教えることができます。
sin(θ)は、幾何学的には「x軸との角度がθとなるような直線と単位円の交点のy座標」として定義されます。コンピュータにsin(θ)を計算させるためには、どうプログラミングすればよいでしょう。
ゆるゆるプログラミングというサイトでは、x軸とy軸に単位ベクトルを配置し、目的の角度に十分近づくまで、両側から「挟み撃ち」していくようなアルゴリズムが紹介されています。アルゴリズムの詳しい説明はサイトをご参照ください。サイトに記載のJavaプログラムをPythonに移植の上、手を加えたものを、以下に記載します。
from math import pi, radians, sqrt
from numpy import absolute, frompyfunc, sin
import matplotlib.pyplot as plt
from statistics import mean, stdev
def _sin1(θ):
# 角度θを0.0~359.999...の範囲に直す
while True:
if θ < 0.0:
θ += 2.0 * pi
continue
if 2.0 * pi <= θ:
θ -= 2.0 * pi
continue
break
# 180度を超える場合、x軸に関して対称とする
if pi < θ:
return -1 * _sin1(2.0 * pi - θ)
# 90〜180度の場合、y軸に関して対称とする
if 0.5 * pi < θ:
return _sin1(pi - θ)
# 結果の初期化
ans_sin = 0.0
# 角度に応じて分岐する
if θ == 0:
ans_sin = 0.0
elif θ == 0.5 * pi:
ans_sin = 1.0
else:
θ1, θ2 = 0.0, 0.5 * pi
x1, y1 = 1.0, 0.0
x2, y2 = 0.0, 1.0
delta = 0.0000000000000001
loopnumber = 0
# l = []
# s = []
# 無限ループ
while True:
# ループ回数
loopnumber += 1
# l.append(loopnumber)
# 角度、座標の中間値を計算
θm, xm, ym = (θ1 + θ2) / 2.0, (x1 + x2) / 2.0, (y1 + y2) / 2.0
# 原点(0,0)と(xm,ym)を結ぶ線の単位ベクトル(new_x, new_y)を計算
d = sqrt(xm ** 2 + ym ** 2)
new_x, new_y = xm / d, ym / d
# s.append(new_y)
# 角度の差がdelta未満で終了
if absolute(θm - θ) < delta:
ans_sin = new_y
'''
# 収束状況を表示
print("ループ回数:" + str(loopnumber))
plt.plot(l, s, marker='.')
plt.grid()
plt.xlabel('ループ回数')
plt.ylabel('sin(θ)')
plt.show()
'''
break
# 角度を狭める
if (θ > θm):
x1, y1, θ1 = new_x, new_y, θm
else:
x2, y2, θ2 = new_x, new_y, θm
return ans_sin
def sin1(θ):
return frompyfunc(_sin1, 1, 1)(θ)
deg = 30.0
rad = radians(deg)
x = sin1(rad)
y = sin(rad)
print("独自関数によるsin(" + str(deg) + "):" + str(x))
print("組込関数によるsin(" + str(deg) + "):" + str(y))
deg = 45.0
rad = radians(deg)
x = sin1(rad)
y = sin(rad)
print("独自関数によるsin(" + str(deg) + "):" + str(x))
print("組込関数によるsin(" + str(deg) + "):" + str(y))
deg = 60.0
rad = radians(deg)
x = sin1(rad)
y = sin(rad)
print("独自関数によるsin(" + str(deg) + "):" + str(x))
print("組込関数によるsin(" + str(deg) + "):" + str(y))
rads = [radians(i) for i in range(0, 359)]
h = sin1(rads)
y = sin(rads)
e = absolute(y - h)
print("誤差最大値 :" + str(max(e)))
print("誤差最小値 :" + str(min(e)))
print("誤差平均値 :" + str(mean(e)))
print("誤差標準偏差:" + str(stdev(e)))
独自関数によるsin(30.0):0.5000000000000004
組込関数によるsin(30.0):0.49999999999999994
独自関数によるsin(45.0):0.7071067811865475
組込関数によるsin(45.0):0.7071067811865475
独自関数によるsin(60.0):0.8660254037844387
組込関数によるsin(60.0):0.8660254037844386
誤差最大値 :5.551115123125783e-16
誤差最小値 :0.0
誤差平均値 :1.386164670430837e-16
誤差標準偏差:1.1688186600394947e-16
高精度な値が得られています。コンピュータが、sin(θ)に関して知能を獲得したと言えます。また、プログラムの内容が説明可能であるところに、好感がもてます。説明可能なツールは、安心して利用できるためです。
解析学的計算
さて、数学の世界には、テイラー展開と呼ばれる技法があります。テイラー展開を用いることにより、以下の等式が得られます。
$$
sin(\theta) = \theta – \frac{\theta^3}{3!} + \frac{\theta^5}{5!} – \frac{\theta^7}{7!} + \frac{\theta^9}{9!} + …
$$
オイラーの等式:$e^{i\pi} + 1 = 0$にもつながる、美しい等式です。この等式の右辺を用いてコンピュータにsin(θ)を計算させることもできるわけですが、そもそも、この右辺はいったい何をしているのでしょうか。
実は、この右辺は、いくつもの曲線を合成することで、サインカーブを再現しようとしています。
from math import factorial, pi
from numpy import arange, sin
import matplotlib.pyplot as plt
θ = arange(0, 2.0 * pi, 0.1)
θ1 = θ
θ3 = -θ**3 / factorial(3)
θ5 = θ**5 / factorial(5)
θ7 = -θ**7 / factorial(7)
θ9 = θ**9 / factorial(9)
θall = θ1 + θ3 + θ5 + θ7 + θ9
sinθ = sin(θ)
plt.figure()
plt.plot(θ, θ1, label='θ1', linestyle='--', alpha=0.5)
plt.plot(θ, θ3, label='θ3', linestyle='--', alpha=0.5)
plt.plot(θ, θ5, label='θ5', linestyle='--', alpha=0.5)
plt.plot(θ, θ7, label='θ7', linestyle='--', alpha=0.5)
plt.plot(θ, θ9, label='θ9', linestyle='--', alpha=0.5)
plt.plot(θ, θall, label='θ1+...+θ9')
plt.plot(θ, sinθ, label='sinθ')
plt.legend()
plt.ylim([-1.1, 1.1])
plt.grid()
plt.xlabel('θ')
plt.ylabel('f(θ)')
plt.show()
たった5つの曲線の合成でも、θ=3.5あたりまでは、それらしく再現できていることがわかります。
では、これをふまえて、解析学的にsin(θ)を計算するアルゴリズムを、コンピュータに教えることにしましょう。
from math import factorial, pi, radians
from numpy import absolute, frompyfunc, sin
from statistics import mean, stdev
def _sin2(θ):
# 角度θを0.0~359.999...の範囲に直す
while True:
if θ < 0.0:
θ += 2.0 * pi
continue
if 2.0 * pi <= θ:
θ -= 2.0 * pi
continue
break
# 180度を超える場合、x軸に関して対称とする
if pi < θ:
return -1 * _sin2(2.0 * pi - θ)
# 90〜180度の場合、y軸に関して対称とする
if 0.5 * pi < θ:
return _sin2(pi - θ)
return sum([(-1)**(i-1) * θ**(2*i-1) / factorial(2*i-1) for i in range(1, 12)])
def sin2(θ):
return frompyfunc(_sin2, 1, 1)(θ)
deg = 30.0
rad = radians(deg)
x = sin2(rad)
y = sin(rad)
print("独自関数によるsin(" + str(deg) + "):" + str(x))
print("組込関数によるsin(" + str(deg) + "):" + str(y))
deg = 45.0
rad = radians(deg)
x = sin2(rad)
y = sin(rad)
print("独自関数によるsin(" + str(deg) + "):" + str(x))
print("組込関数によるsin(" + str(deg) + "):" + str(y))
deg = 60.0
rad = radians(deg)
x = sin2(rad)
y = sin(rad)
print("独自関数によるsin(" + str(deg) + "):" + str(x))
print("組込関数によるsin(" + str(deg) + "):" + str(y))
rads = [radians(i) for i in range(359)]
h = sin2(rads)
y = sin(rads)
e = absolute(y - h)
print("誤差最大値 :" + str(max(e)))
print("誤差最小値 :" + str(min(e)))
print("誤差平均値 :" + str(mean(e)))
print("誤差標準偏差:" + str(stdev(e)))
独自関数によるsin(30.0):0.49999999999999994
組込関数によるsin(30.0):0.49999999999999994
独自関数によるsin(45.0):0.7071067811865475
組込関数によるsin(45.0):0.7071067811865475
独自関数によるsin(60.0):0.8660254037844385
組込関数によるsin(60.0):0.8660254037844386
誤差最大値 :3.3306690738754696e-16
誤差最小値 :0.0
誤差平均値 :1.1695900013687744e-16
誤差標準偏差:9.066751491381523e-17
またしても、高精度な値が得られています。コンピュータが、sin(θ)に関してさらなる知能を獲得したと言えます。しかし、テイラー展開を知らない人間に対しては、説明のしようのないプログラムではあります。でも、それは仕方ないでしょう。以下等式が成り立つことは数学的事実なのです。それゆえ、ツールの妥当性は担保されており、安心して利用できると言えます。
$$
sin(\theta) = \theta – \frac{\theta^3}{3!} + \frac{\theta^5}{5!} – \frac{\theta^7}{7!} + \frac{\theta^9}{9!} + …
$$
さて、sin(θ)の計算方法を二つ、コンピュータに教えたわけですが、両者の性能を比較してみましょう。
from math import radians
deg = 30.0
rad = radians(deg)
%timeit x = sin1(rad)
%timeit x = sin2(rad)
64.1 µs ± 502 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
9.16 µs ± 62.9 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
解析学的な計算方法の方が約7倍速いという結果となりました。数学者ブルック・テイラーは偉大ですね。
クラシカルな機械学習による計算
クラシカルな機械学習による手法(重回帰分析)で、コンピュータにsin(θ)を計算させてみましょう。まず「sin(θ)がθのn次の多項式で表現できる」という仮説を立てます。
$$sin(\theta) = b_1\theta^1 + b_2\theta^2 + b_3\theta^3 …$$
次に、0から0.5πの間に無数に存在する実数の内、300個をサンプルデータとして与えます。そして、統計学的処理(=訓練)を実行させ、回帰係数(=重み)bを推定させます。最後に、そうしてできたモデルをつかって、sin(θ)を計算するという流れです。
from os import mkdir
from os.path import exists
from sys import exc_info
from math import pi, radians
from numpy import absolute, array, arange, frompyfunc, sin
from pandas import DataFrame
from sklearn.externals.joblib import dump, load
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
from statistics import mean, stdev
class MregSin:
# モデル
modeldir = './data'
modelfile = './data/MregSin.pkl'
# データに関するパラメータ
number_of_train_data = 300
start_of_train_data = 0.0 * pi
stop_of_train_data = 0.5 * pi
# モデルに関するパラメータ
number_of_features = 11
# 訓練に関するパラメータ
# 特になし
def __init__(self, recycle=True):
if recycle and exists(MregSin.modelfile):
try:
print('訓練済みモデルを読み込みます。')
self.__model = load(MregSin.modelfile)
except:
print('訓練済みモデルの読み込み中にエラーが発生しました。')
print('Unexpected error:', exc_info()[0])
raise
else:
print('訓練を行うので、お待ちください。')
# データ
feature_names = [str(i) for i in
range(1, MregSin.number_of_features + 1, 1)]
x = arange(MregSin.start_of_train_data, MregSin.stop_of_train_data,
(MregSin.stop_of_train_data - MregSin.start_of_train_data)
/ MregSin.number_of_train_data)
data = [[i**j for j in
range(1, MregSin.number_of_features + 1, 1)] for i in x]
target = sin(x)
# モデル
self.__model = LinearRegression()
# 訓練
self.__model.fit(data, target)
# 訓練状況の可視化
print('回帰係数')
coefficient = DataFrame({'feature' : feature_names
, 'coefficient' : self.__model.coef_})
print(coefficient)
print('切片')
print(self.__model.intercept_)
# 予測
x2 = [x[i] for i in
range(0, len(x), round(0.02 * MregSin.number_of_train_data))]
data2 = [[i**j for j in
range(1, MregSin.number_of_features + 1, 1)] for i in x2]
target2 = [target[i] for i in
range(0, len(target), round(0.02 * MregSin.number_of_train_data))]
predicted = self.__model.predict(data2)
plt.figure()
plt.plot(x2, target2, marker='.', label='組込関数')
plt.plot(x2, predicted, marker='.', label='独自関数')
plt.legend(loc='best', fontsize=10)
plt.grid()
plt.xlabel('θ')
plt.ylabel('sin(θ)')
plt.show()
# モデルの保存
if not exists(MregSin.modeldir):
try:
mkdir(MregSin.modeldir)
except:
print('モデル保存フォルダの作成中にエラーが発生しました。')
print('Unexpected error:', exc_info()[0])
raise
try:
dump(self.__model, MregSin.modelfile)
except:
print('モデルの保存中にエラーが発生しました。')
print('Unexpected error:', exc_info()[0])
raise
def __sin(self, θ):
# 角度θを0.0~359.999...の範囲に直す
while True:
if θ < 0.0:
θ += 2.0 * pi
continue
if 2.0 * pi <= θ:
θ -= 2.0 * pi
continue
break
# 180度を超える場合、x軸に関して対称とする
if pi < θ:
return -1 * self.sin(2.0 * pi - θ)
# 90〜180度の場合、y軸に関して対称とする
if 0.5 * pi < θ:
return self.sin(pi - θ)
data = [[θ**i for i in range(1, MregSin.number_of_features + 1, 1)]]
return self.__model.predict(data)[0]
def sin(self, θ):
return frompyfunc(self.__sin, 1, 1)(θ)
ds = MregSin(recycle=False)
deg = 30.0
rad = radians(deg)
x = ds.sin(rad)
y = sin(rad)
print("独自関数によるsin(" + str(deg) + "):" + str(x))
print("組込関数によるsin(" + str(deg) + "):" + str(y))
deg = 45.0
rad = radians(deg)
x = ds.sin(rad)
y = sin(rad)
print("独自関数によるsin(" + str(deg) + "):" + str(x))
print("組込関数によるsin(" + str(deg) + "):" + str(y))
ds = MregSin()
deg = 60.0
rad = radians(deg)
x = ds.sin(rad)
y = sin(rad)
print("独自関数によるsin(" + str(deg) + "):" + str(x))
print("組込関数によるsin(" + str(deg) + "):" + str(y))
rads = [radians(i) for i in range(359)]
h = ds.sin(rads)
y = sin(rads)
e = absolute(y - h)
print("誤差最大値 :" + str(max(e)))
print("誤差最小値 :" + str(min(e)))
print("誤差平均値 :" + str(mean(e)))
print("誤差標準偏差:" + str(stdev(e)))
訓練を行うので、お待ちください。
回帰係数
feature coefficient
0 1 1.000000e+00
1 2 -2.602449e-10
2 3 -1.666667e-01
3 4 -1.611588e-08
4 5 8.333389e-03
5 6 -1.227027e-07
6 7 -1.982343e-04
7 8 -1.720502e-07
8 9 2.863353e-06
9 10 -4.069894e-08
10 11 -1.754363e-08
切片
-8.915090887740007e-14
独自関数によるsin(30.0):0.5000000000000134
組込関数によるsin(30.0):0.49999999999999994
独自関数によるsin(45.0):0.7071067811865207
組込関数によるsin(45.0):0.7071067811865475
訓練済みモデルを読み込みます。
独自関数によるsin(60.0):0.8660254037844507
組込関数によるsin(60.0):0.8660254037844386
誤差最大値 :1.6620038678638593e-13
誤差最小値 :2.55351295663786e-15
誤差平均値 :2.1351626923889052e-14
誤差標準偏差:1.5984259514679425e-14
かなり、うまくいきましたね。もちろん、仮説が的確すぎた(=特徴量として最適なものを選んだ)ので、このような結果になるのも当然ですが…いずれにせよ、コンピュータがもう一つ、sin(θ)に関して、知能を獲得したと言えます。
しかし、なぜこの特徴量で良いのか、なぜこの重みで良いのか、説明できるでしょうか。「『sin(θ)がθのn次の多項式で表現できる』という仮説を立て、実際のデータを元に妥当な重みを計算。完成したモデルを検証用のデータで検証してみたところ、仮説が99.9%正しいことを証明できた。」といった説明しかできない気がします。統計学的に理論武装しておかないと、このツールの妥当性を説明できないかもしれませんね。
なお、このプログラムは、私が書いた初めてのscikit-learnプログラムとなります。公式サイトのほかに、以下サイトを参考にさせて頂きました。
- 誰でも出来る!!scikit-learn(sklearn)で重回帰分析しちゃう
- pandasの使い方(2) DataFrameの生成
- [Python3] scikit-learnによる機械学習4: 学習が完了したモデルを永続化する
ディープラーニングによる計算
最後に、ディープラーニングによって、コンピュータにsin(θ)を計算させてみましょう。0から0.5πの間に無数に存在する実数の内、30万個をサンプルデータとして与え、統計学的処理(=訓練)を実行させます。そうしてできたモデルをつかって、sin(θ)を計算するという流れです。
from os import mkdir
from os.path import exists
from sys import exc_info
from math import pi, radians
from numpy import absolute, arange, array, frompyfunc, sin
from keras.models import load_model, Sequential
from keras.layers import Dense, Dropout
from keras.callbacks import EarlyStopping
import matplotlib.pyplot as plt
from statistics import mean, stdev
class DeepSin:
# モデル
modeldir = './data'
modelfile = './data/DeepSin.h5'
# データに関するパラメータ
number_of_train_data = 300000
start_of_train_data = 0.0 * pi
stop_of_train_data = 0.5 * pi
number_of_test_data = 0.3 * number_of_train_data
start_of_test_data = 0.0
stop_of_test_data = 0.5 * pi
# モデルに関するパラメータ
number_of_layer = 10
units = 30
# 訓練に関するパラメータ
# min_delta = 0
# patience = 0
batch_size = round(0.01 * number_of_train_data)
epochs = 20
def __init__(self, recycle=True):
if recycle and exists(DeepSin.modelfile):
try:
print('訓練済みモデルを読み込みます。')
self.__model = load_model(DeepSin.modelfile)
except:
print('訓練済みモデルの読み込み中にエラーが発生しました。')
print('Unexpected error:', exc_info()[0])
raise
else:
print('訓練を行うので、お待ちください。')
# print('学習が頭打ちになった場合、途中で訓練を打ち切ります。')
# データ
trX = arange(DeepSin.start_of_train_data, DeepSin.stop_of_train_data,
(DeepSin.stop_of_train_data - DeepSin.start_of_train_data)
/ DeepSin.number_of_train_data)
trY = sin(trX)
valX = arange(DeepSin.start_of_test_data, DeepSin.stop_of_test_data,
(DeepSin.stop_of_test_data - DeepSin.start_of_test_data)
/ DeepSin.number_of_test_data)
valY = sin(valX)
# モデル
self.__model = Sequential()
self.__model.add(Dense(1, input_dim=1, activation='linear'))
for i in (range(DeepSin.number_of_layer)):
self.__model.add(Dense(DeepSin.units, activation='relu'))
self.__model.add(Dense(1))
self.__model.compile(loss='mean_squared_error', optimizer='Adam')
# 訓練
# early_stopping = EarlyStopping(monitor='val_loss'
# , min_delta=DeepSin.min_delta
# , patience=DeepSin.patience
# , mode='auto'
# )
hist = self.__model.fit(trX, trY,
batch_size=DeepSin.batch_size
, epochs=DeepSin.epochs
# , callbacks=[early_stopping]
, validation_data=(valX, valY)
)
# 訓練状況の可視化
loss = hist.history['loss']
val_loss = hist.history['val_loss']
plt.figure()
plt.plot(range(1, len(loss) + 1),
loss, marker='.', label='訓練データ')
plt.plot(range(1, len(val_loss) + 1),
val_loss, marker='.', label='テストデータ')
plt.legend(loc='best', fontsize=10)
plt.grid()
plt.xlabel('エポック')
plt.ylabel('損失')
plt.show()
# 予測
trX2 = array([trX[i] for i in
range(0, len(trX), round(0.02 * DeepSin.number_of_train_data))])
trY2 = array([trY[i] for i in
range(0, len(trY), round(0.02 * DeepSin.number_of_train_data))])
predicted = self.__model.predict(trX2)
plt.figure()
plt.plot(trX2, trY2, marker='.', label='組込関数')
plt.plot(trX2, predicted, marker='.', label='独自関数')
plt.legend(loc='best', fontsize=10)
plt.grid()
plt.xlabel('θ')
plt.ylabel('sin(θ)')
plt.show()
# モデルの保存
if not exists(DeepSin.modeldir):
try:
mkdir(DeepSin.modeldir)
except:
print('モデル保存フォルダの作成中にエラーが発生しました。')
print('Unexpected error:', exc_info()[0])
raise
try:
self.__model.save(DeepSin.modelfile)
except:
print('モデルの保存中にエラーが発生しました。')
print('Unexpected error:', exc_info()[0])
raise
def __sin(self, θ):
# 角度θを0.0~359.999...の範囲に直す
while True:
if θ < 0.0:
θ += 2.0 * pi
continue
if 2.0 * pi <= θ:
θ -= 2.0 * pi
continue
break
# 180度を超える場合、x軸に関して対称とする
if pi < θ:
return -1 * self.sin(2.0 * pi - θ)
# 90〜180度の場合、y軸に関して対称とする
if 0.5 * pi < θ:
return self.sin(pi - θ)
return self.__model.predict([θ])[0][0]
def sin(self, θ):
return frompyfunc(self.__sin, 1, 1)(θ)
ds = DeepSin(recycle=False)
deg = 30.0
rad = radians(deg)
x = ds.sin(rad)
y = sin(rad)
print("独自関数によるsin(" + str(deg) + "):" + str(x))
print("組込関数によるsin(" + str(deg) + "):" + str(y))
deg = 45.0
rad = radians(deg)
x = ds.sin(rad)
y = sin(rad)
print("独自関数によるsin(" + str(deg) + "):" + str(x))
print("組込関数によるsin(" + str(deg) + "):" + str(y))
ds = DeepSin()
deg = 60.0
rad = radians(deg)
x = ds.sin(rad)
y = sin(rad)
print("独自関数によるsin(" + str(deg) + "):" + str(x))
print("組込関数によるsin(" + str(deg) + "):" + str(y))
rads = [radians(i) for i in range(359)]
h = ds.sin(rads)
y = sin(rads)
e = absolute(y - h)
print("誤差最大値 :" + str(max(e)))
print("誤差最小値 :" + str(min(e)))
print("誤差平均値 :" + str(mean(e)))
print("誤差標準偏差:" + str(stdev(e)))
Using TensorFlow backend.
訓練を行うので、お待ちください。
Train on 300000 samples, validate on 90000 samples
Epoch 1/20
300000/300000 [==============================] - 2s 5us/step - loss: 0.0697 - val_loss: 0.0012
Epoch 2/20
300000/300000 [==============================] - 1s 3us/step - loss: 5.5763e-04 - val_loss: 2.6283e-04
Epoch 3/20
300000/300000 [==============================] - 1s 3us/step - loss: 1.3936e-04 - val_loss: 5.4291e-05
Epoch 4/20
300000/300000 [==============================] - 1s 3us/step - loss: 2.5608e-05 - val_loss: 9.9707e-06
Epoch 5/20
300000/300000 [==============================] - 1s 3us/step - loss: 5.6591e-06 - val_loss: 4.3353e-06
Epoch 6/20
300000/300000 [==============================] - 1s 3us/step - loss: 2.4574e-06 - val_loss: 1.3504e-06
Epoch 7/20
300000/300000 [==============================] - 1s 3us/step - loss: 1.4784e-06 - val_loss: 9.6404e-07
Epoch 8/20
300000/300000 [==============================] - 1s 3us/step - loss: 1.1821e-06 - val_loss: 5.3071e-07
Epoch 9/20
300000/300000 [==============================] - 1s 3us/step - loss: 1.1959e-06 - val_loss: 2.5098e-06
Epoch 10/20
300000/300000 [==============================] - 1s 3us/step - loss: 1.2143e-06 - val_loss: 4.1867e-07
Epoch 11/20
300000/300000 [==============================] - 1s 3us/step - loss: 1.6130e-06 - val_loss: 2.5240e-07
Epoch 12/20
300000/300000 [==============================] - 1s 3us/step - loss: 7.9917e-07 - val_loss: 5.5269e-07
Epoch 13/20
300000/300000 [==============================] - 1s 3us/step - loss: 1.9296e-06 - val_loss: 4.3476e-07
Epoch 14/20
300000/300000 [==============================] - 1s 3us/step - loss: 1.2812e-06 - val_loss: 2.6409e-07
Epoch 15/20
300000/300000 [==============================] - 1s 3us/step - loss: 1.2712e-06 - val_loss: 1.9644e-07
Epoch 16/20
300000/300000 [==============================] - 1s 3us/step - loss: 2.0916e-06 - val_loss: 3.1340e-07
Epoch 17/20
300000/300000 [==============================] - 1s 3us/step - loss: 1.1972e-06 - val_loss: 8.7616e-07
Epoch 18/20
300000/300000 [==============================] - 1s 3us/step - loss: 2.6864e-06 - val_loss: 1.4640e-05
Epoch 19/20
300000/300000 [==============================] - 1s 3us/step - loss: 4.0446e-06 - val_loss: 1.4378e-05
Epoch 20/20
300000/300000 [==============================] - 1s 3us/step - loss: 1.1424e-06 - val_loss: 1.0116e-07
独自関数によるsin(30.0):0.500035
組込関数によるsin(30.0):0.49999999999999994
独自関数によるsin(45.0):0.70708025
組込関数によるsin(45.0):0.7071067811865475
訓練済みモデルを読み込みます。
独自関数によるsin(60.0):0.86587673
組込関数によるsin(60.0):0.8660254037844386
誤差最大値 :0.00250852108001709
誤差最小値 :3.4490914585516563e-06
誤差平均値 :0.0001902273061400219
誤差標準偏差:0.0002800383029470891
さすがに、精度の点では、他のアプローチに及びませんでした。人間がコンパスと分度器と定規でsin(θ)を求める場合と比較して、どちらが精度が高いでしょうね。
なお、このプログラムは、私が書いた初めてのディープラーニングですが、完成させるまでに試行錯誤を重ねました。
- データの桁数が増えたら精度も増えるように見えたので、与えるデータ量を増やしたら、メモリがスワップアウトして、固まってしまった。
- 別の条件下では、データの桁数を増やしたところ、かえって測定結果が悪化するように見えた。
- ユニット数や中間層の数を増やせば、表現力がアップするのかと思いきや、必ずしもそうではなかった。結果を出すためには、ちょうど良いバランスを見つける必要があった。
結局のところ、サインカーブの対称性に着目し、データの範囲を0から0.5πの間にしぼることにより(=表現対象を単純化することにより)、それなりのリソース(時間、空間)で、それなりの精度が得られるようになりました。私の知識不足もあるのでしょうが、ディープラーニングの難しさを感じました。ディープラーニングの開発のマネージャーをやられている方々は、どうやってマネジメントされているんでしょうね。
そして説明可能性という点では…「そもそも、深層ニューラルネットワークは、パラメータ調整により、任意の関数を任意の精度で近似することができる。利用可能なリソースも考慮のうえ、これくらいのネットワークなら近似できるだろうという仮説を立て、パラメータを設定。実際のデータを元に訓練を実施し、完成したモデルを検証用のデータで検証してみたところ、一定程度の精度が得られたのでこれで良しとした。」といった説明しかできないように思います。これで納得してもらえるでしょうか。なかなか難しいと思いますね。LIME、SHAP、Grad-CAMなどの「説明可能性を取り戻す」仕組みの実用化が待たれます。
まとめ
機械学習という手法の登場によって、コンピュータに知能をもたせる取り組み——広義のプログラミングと言って良いかもしれない——は、大きく幅が広がりました。
演繹から帰納。論理学から統計学。思弁から経験。そのパラダイム転換に戸惑いつつも、新しい「おもちゃ」の登場に喜ぶ子どものような気分もあります。
とはいえ、喜んでばかりもいられません。二木康晴/塩野誠(2017)によれば、人工知能の法的位置付けは「当分の間、単なる道具」で、行為の責任は、設計開発者 and / or 管理利用者が負うことになるだろうとのことです。
一人の開発者としても、ツールの妥当性を説明する言葉をもたなければいけないと、痛切に感じています。その言葉はたぶん、統計学の言葉なんだろうなと思いつつ、この駄文に終止符を打つことにします。ここまで読んでくださる方、いるのかな。
- TensorFlowのチュートリアルのチュートリアル
- 【機械学習】scikit learnでの画像減色プログラム
- TensorFlow製アート・音楽生成プロジェクト「magenta」で曲を作ってみる。
- サカナクションさんをTensorFlow製アート・音楽生成プロジェクト「Magenta」に学習させてみる。
- pixivの機械学習モデルからアイドルのキャラクター性を計算してみたよ ζ*’ヮ’)ζ
- 非プログラマのための機械学習ツールKNIMEのご紹介
- 機械学習でお客様が他にも買いそうな商品を予測しようじゃないか
- Tensorflowの精度低下はlog(0)のせいだった
- 手書きひらがなの認識で99.78%の精度をディープラーニングで
- TensorFlow製音楽生成プロジェクト「Magenta」を開発環境の設定から曲生成までやってみる。
- AdaGradが学習率のスケジューリングを上手く調整してくれる理由 – 理論編 –
- TensorFlow製音楽生成プロジェクト「Magenta」でMIDIファイルを学習させ、曲を生成する。
- 論文要約: Learning both Weights and Connections for Efficient Neural Networks
- 自然言語入力処理のMicrosoft LUIS(日本語版)を使ってChatBotサンプルを作ってみる
- ILSVRCとは何か?
- Ubuntu16.04 + GTX1080 + CUDA8.0で 機械学習環境を構築する
- エロゲ製作でAIを使おうとした話
- 人はRubyだけで手書き数字認識できるか?
- PandasのCategorical関係を調べてみた~慣れれば便利(と思う)
- ニューラルネットワークのライブラリのインストール方法
- 確率的勾配降下法をadで実装してみた
- クラウド統合開発環境Cloud9でTensorFlowを使う~GetStarted~
- 深層学習フレームワークヒッチハイクガイドVer3.0
- Kerasでアニメキャラの顔認識
- paragraph2vecの論文 要訳 (Distributed Representations of Sentences and Documents)
- 問題が明確化できているときは、半分解けている
- Coursera Machine Learning スライドまとめ
- Coursera Machine Learning 総復習用メモ
- 機械学習用の画像切り出しツールを作る
- <初心者向け>pythonライブラリ<機械学習用>
- 代表的な機械学習手法一覧
- Deep Learning bookを読んで学んだこと
- データシティ鯖江のオープンデータを使って水位計の値を機械学習で予測してみる
- Recurrent Neural Networkの基礎(Peterさんのチュートリアルの翻訳)
- {tensorflow}をirisデータで試してみる
- Python 機械学習プログラミング 第1章 「データから学習する能力」をコンピュータに与える まとめ
- 【機械学習】手書き文字データで分類器のパフォーマンスチェックをしてみる
- Pythonで体験する深層学習 2章(輪講用資料)
- 直感のきく技術者になろう
- numpyだけでCNN実装
- JubatusでQiita記事を推薦してくれる日報アプリ作ってみた
- 機械学習(深層学習)で画像関連をやってみたい場合はじめに抑えておいた方がよいものは何か
- TensorFlowをWindowsでビルドする
- 統計学とデータ分析で儲ける作戦! 選挙のタイミングで儲けられる銘柄を、相関係数を用いて探す
- ディープラーニングでメイドインアビスの欠落文字を推定する
- PRML第1章 ベイズ曲線フィッティング Python実装
- pythonでRNN実装
- scikit-learnでDBSCAN(クラスタリング)
- ディープラーニングが分からなくてもいい感じに物体認識させるサービスを試す(iOS Swift + Bluemix Visual Recognition)
- 機械学習関連情報をトピックモデルで分類する
- Watson ConversationのTutorialを日本語でやってみた (前編)
- 活性化関数ReLUについてとReLU一族【追記あり】
- seq2seqで利用可能な日本語対話データセットをダウンロードするツール
- PRML第2章 スチューデントのt分布 Python実装
- メモリを操作するRNNでソートアルゴリズム(可変長&順序フラグあり)を機械学習できたよっ!
- Coursera Machine Learning (1): 機械学習とは?単回帰分析、最急降下法、目的関数
- 機械学習をざっくりと理解する
- 機械学習を始めて2週間、機械学習を始めるのに必要だったこと
- Vision APIとNatural Language APIを組み合わせて名刺から情報抽出する
- 名刺から情報を抽出するSlackBotを作る
- Jubatusを使った感情分析を行うLINE Botの作成
- ChainerでYOLO
- うまくいきそうにない技術
- アンサンブル学習(Stacked generalization)のサンプルプログラムと実行例
- f-divergence一族の可視化
- Coursera Machine Learningの教材に沿って協調フィルタリングを学ぶ
- Watson ConversationのTutorialを日本語でやってみた (後編)
- FXシステムトレードのプログラムをいくつか作ってみて分かった課題とその解決法について
- 機械学習の開発内容について(Example)
- KerasでDCGAN書く
- Kaggleまとめ:BOSCH(kernels)
- Watson Visual Recognitionがすごすぎて俺の中で話題になっている件
- 高次元データの次元削減および2次元プロット手法
- Coursera Machine Learning (2): 重回帰分析、スケーリング、正規方程式
- PRML第3章 エビデンス近似 Python実装
- Windows10にChainer+CUDA 8.0をインストール
- Kaggleまとめ:BOSCH(winner)
- Watson Visual Recognitionを使った簡単顔認識アプリを作ってみよう
- Numpyのみを用いた、畳み込みニューラルネットワークの実装
- Tensorflowを使ってROS上でMNISTをやるノードを立てる
- 未踏の応募資料を公開します 【統計的かな漢字変換】
- MeCabとNEologdのインストール方法(CentOS6/CentOS7)
- PRMLのアルゴリズムをPython(ほぼNumpyだけ)で実装
- pythonでHMMのパラメータ推定実装
- 非機械的データ分析入門
- Tensorflow_in_ROSのコードを解説する
- Coursera Machine Learning (3): ロジスティック回帰、正則化
- 【初心者向け】Re:ゼロから始める遺伝的アルゴリズム【人工知能】
- PRML第4章 ベイズロジスティック回帰 Python実装
- Googleスプレッドシートの機械学習アドオンを日本語で試す
- defragTreesがよさそう
- 深層強化学習(DQN)でオセロもどきAIを作ってみた
- TensorFlow 0.12で追加されたEmbedding Visualizationを試す
- ニューラルかな漢字変換
- Jubatus をインストールして使ってみる【2017年版】
- [Python] Deep Learning: ディープラーニング (DBN, SDA) をライブラリを使わずに実装してみた
- 機械学習で美少女化 ~ あるいはNEW GAME! の世界 ~
- 取り急ぎpix2pixで遊んでみた(追記あり)
- 【論文シリーズ】DNCー動的な記憶装置を搭載した人工知能
- 全自動機械学習で実現する、現場のためのワンクリックデータ予測
- 誰でも分かるTrueSkill
- 機械学習向け並列分散処理フレームワーク Petuum について調べてみた
- Julia のススメ 〜 Deep Learning のための Julia 〜
- Coursera Machine Learning: 概要とWeek1-Week5までを振り返って
- Noise Contrastive Estimationについて
- Ruby でニューラルネットワーク
- メンターとパンサーを人工知能に区別させてみた
- Schooの動画レコメンドについて
- AdaBoost の弱学習器を色々試してみた
- PRML第5章 混合密度ネットワーク Python実装
- NLP/機械学習/データ分析系のDockerイメージ8選 + 1
- pix2pixでポップアートから写真を復元してみた (追記あり)
- “逐次的np.append”と”list.append+最後にnp.array作成”の速度比較
- Coursera Machine Learning (4): ニューラルネットワーク入門
- 幼女画像判定システムLolinco フロント編
- GCP(Google Cloud Platform)を活用した機械学習バッチ運用環境(2016)
- TensorFlowのinitialize_all_variablesがDeprecatedになった件
- これを理解できれば自然言語処理もできちゃう? MNISTでRNN(LSTM)を触りながら解説
- TensorFlow の名前空間を理解して共有変数を使いこなす
- Girl Friend Factory – 機械学習で彼女を創る –
- 機械学習でなんとなく材料研究者の気分を味わおう
- (Chainer) DNC(Differentiable Neural Computers)で文字列の学習&生成
- 絵で理解するWord2vecの仕組み
- PCAとSVDの関連について
- PRML第6章 ガウス過程による回帰 Python実装
- 人工知能やディープラーニングの理解に欠かせないパーセプトロンとは何か?
- 「ゼロから作るDeep Learning」の環境をDockerで作る
- JavaScript でニューラルネットワーク
- 2016年のディープラーニング論文100選
- 『Rによるデータサイエンス』をcaretで再現する
- Coursera Machine Learning (5): ニューラルネットワークとバックプロパゲーション
- ついに来た! Azure GPU インスタンス上に30分で構築する TensorFlow on GPU 実行環境構築手順
- LSTMを超える期待の新星、QRNN
- 非線形SVMとscikit-learnによる実装
- NIPS 2016参加報告
- PythonでAIシミュレーションプラットフォームOpen AI Gym を利用して遊ぶ (DQN編)
- TensorFlowをGCPで実行してみる
- Tensorflowで個人サービスにアップロードされた不適切なイラスト画像を検出する
- Chainerでモノクロ画像のカラー化を学習してみる
- Watson Knowledge StudioのTutorialをやってみた (前編)
- TensorFlowで競艇予想
- 環境構築から深層学習チュートリアル
- 2標本問題の新展開~古典的手法からカーネル法まで~
- 医薬品設計とニューラルネットワーク
- Javaで機械学習(DeepLeaning4j) 文書を学習して特定の単語と関連性の高い単語を抽出してみる
- 機械学習を1ヵ月で実践レベルにする #1 (とっかかり編)
- AWS Lambdaによるサーバーレスな機械学習APIの作り方
- 機械学習モデルの実装における、テストについて
- 空気を読むUIを作る
- 30分でわかる機械学習用語「クラスタリング(Clustering)」
- 機械学習を1ヵ月で実践レベルにする #2 (オンライン講座)
- PythonからGPU使用率などの情報を取得する(nvidia-smiコマンド)
- DeepLearning研究 2016年のまとめ
- 機械学習を1ヵ月で実践レベルにする #3 (Octave 編)
- scikit-optimizeの紹介
- 機械学習で競馬予想(その4)
- foobarNet: ディープラーニング関連の○○Netまとめ
- TensorFlowで畳み込みLSTMを用いた動画のフレーム予測
- まだ機械学習の論文を追うのに消耗してるの?それBotで解決したよ
- 確率とモナドと確率論的プログラミング
- 森を彷徨う
- 対話システムに使える(かもしれない)音声情報処理入門
- Pythonにまつわる3タイプ別オススメ書籍
- 【初級編; 2017年版】脳波で機械を操る!ブレインコンピュータインタフェース(BCI/BMI)って何?
- ペンパイナッポーとアッポーペンを識別する(ChainerでYOLO ver2)
- 機械学習を1ヵ月で実践レベルにする #4 (線形回帰編)
- 【転職会議】クチコミをword2vecで自然言語処理して会社を分類してみる
- 深層学習による声質変換
- RNNで人間行動認識
- Word2Vecを用いた類義語の抽出が上手く行ったので、分析をまとめてみた
- ボット開発者のための機械学習入門
- 「量子コンピュータが人工知能を加速する」を読んで、数式を使わずにPythonでその概要を説明してみた
- Metalでカメラからの動画入力をリアルタイム処理する
- 機械学習におけるクラス分類問題の各関数の意味解説
- 【翻訳】scikit-learn 0.18 User Guide 4.3. データ前処理
- CCVを使ってみよう
- 【翻訳】scikit-learn 0.18 User Guide 3.1. クロスバリデーション:推定器の成果を評価する
- Jubatusのバースト検知機能(jubaburst)を使ってみた
- TensorFlow for iOS のモデルについて
- WindowsでGPU使ってTensorFlowを動かすメモ(TensorBoardも動かす)
- 【翻訳】scikit-learn 0.18 User Guide 3.3. モデル評価:予測の質を定量化する
- iOSのMPSCNNによる手書き数字認識のサンプルを読む – 前編
- インフラエンジニアが見た機械学習のトップカンファレンス NIPS 2016
- RNNにおけるDropoutの適用について
- 手書きで数式を書きつつストレス無くノートをデジタル化する方法
- 【PyStan】Graphical LassoをStanでやってみる。
- javascriptでchainerモデルを利用するためのKeras.js
- ニューラルネットワークは電気ねずみの夢を見るか?
- 量子アニーリングで組合せ最適化
- Retty流『2200万ユーザを支える機械学習基盤』の作り方
- 新年をシリコンバレーで迎えるための7日間ハンズオン
- TensorFlowは「テンサーフロー」か「テンソルフロー」か?TensorFlow自身に聞いてみる。
- チャットボットをAIでもっと素敵にする!自然言語処理の仕組み
- DeepLearningはアニメを変えるのか?
- PyCon 2016で発表したChat Botをコードベースから解説(Chainerを利用した雑談応答編)
- 30分でわかる機械学習用語「次元削減(Dimensionality Reduction)」
- 機械学習を1ヵ月で実践レベルにする #9 (オーバーフィッティング)
- iOSのMetalで畳み込みニューラルネットワーク – MPSCNNを用いた手書き数字認識の実装
- Keras+DQNでリバーシのAI書く
- 3層ニューラルネットワークを実装する
- 外部メモリー付きのニューラルネット”Differentiable Neural Computing (DNC)”について解説するよ
- 機械学習の学習用に画像情報抽出とラベル付けが自動でできる前処理アプリをRailsで作ってみた
- Raspberry Pi 深層学習ライブラリで物体認識(Keras with TensorFlow・Open CV)
- scikit-learnを用いた機械学習入門 -データの取得からパラメータ最適化まで
- 音楽の構成(Aメロ、サビ等)を自動で分割する。
- ニューラルネットワークの出力層設計に関する指針
- ロバストにいこう
- ゼロから作るDeep Learning Pythonで学ぶディープラーニングの理論と実装 第3章
- TensorFlow Saverで保存する世代数を指定する方法 (元旦の悲劇)
- 江ノ島を描く ~Neural Style~ [TensorFlowでDeep Learning 14]
- ”ゼロから作る Deep Learning”のための環境構築をdockerとVagrantで実現
- 私的Chainer入門
- WebでChainerを「触って」学習出来る Chainer Playground をやってみた
- 機械学習に必要な最急降下法の実装に必要な知識まとめ
- ディープラーニング(seq2seq)でtwitter chatbotを作ってみた
- 文章を○○風に変換する機械学習をやってみた
- Coursera Machine Learning (6): 機械学習のモデル評価(交差検定、Bias & Variance、適合率 & 再現率)
- 機械学習の内輪向け勉強会: 概念の理解
- PRML第10章 変分混合ガウス分布 Python実装
- 可能性の枝切りができない開発は必ず失敗する。
- Raspberry Pi 深層学習で「赤りんご」と「青りんご」を見分ける(Keras・Open CV)
- Coursera Machine Learning (7): サポートベクターマシーン (SVM)、カーネル (Kernel)
- Coursera Machine Learning (8): 教師なし学習 (K-Means)、主成分分析 (PCA)
- 機械学習で精度が出ない時にやることまとめ
- fastTextを使って単語じゃないものの分散表現を獲得する
- 機械学習をゼロから1ヵ月間勉強し続けた結果
- LightGBM ハンズオン – もう一つのGradient Boostingライブラリ
- 多分もっともわかりやすいTensorFlow 入門 (Introduction)
- 3日で資産が3倍に!! Azure Machine Learning(ML) でFx予測と自動売買連携。-その1 概要・準備編
- 【Tensorflow入門】適当にTensorflowを理解して、モデルを作ってみる
- カルマンフィルタってなに?
- ゼロから作るDeep Learningのメモまとめ
- Stanfordの授業CS231nでニューラルネット、畳み込みニューラルネットを学ぶ
- Raspberry Pi 深層学習でリアルタイム顔認識(Keras・Open CV)
- NIPS 2016 Adversarial Training Workshop 体験記
- 機械学習で電力需要を予測してみる パート2
- TensorFlowの学習モデルによるモバイル端末でのリアルタイム画像認識
- Coursera Machine Learning (10): 大規模機械学習
- いますぐ使える単語埋め込みベクトルのリスト
- OpenAI UniverseでするAtari Pongの強化学習
- 【初心者向け】MacでDockerを使ってTensorFlowを試す(Jupyter Notebook)
- 機械学習ことはじめ(オススメ教材・情報)
- Inside of Deep Learning (ディープラーニングの基本要素)
- Inside of Deep Learning あるいは深層学習は何を変えるのか
- ゆるふわ強化学習1
- PRML第12章 ベイズ的主成分分析 Python実装
- はじめての人向け機械学習【2017年度版】
- ニューラルネットワークを使ったWindowsアプリを作成
- Jupyter on Dockerでパスワードの設定方法が分からないあなたへ
- Coursera Machine Learning (11): 写真の光学文字認識 (Photo OCR)
- fastTextの学習済みモデルを公開しました
- ChainerやTensorFlowでGPUを使うと毎回結果が変わる理由と対策 (まとめ)
- ChainerでGPUを使うと毎回結果が変わる理由と対策
- TensorFlowでGPUを使うと毎回結果が変わる理由と対策
- 【word2vec】会社のクチコミを自然言語処理した結果を可視化してみる
- 再訪scikit-learn
- Pythonでベイズ最適化を行うパッケージ GPyOpt
- 機械学習のルールとベストプラクティス(Rules of Machine Learning: Best Practices for ML Engineering の意訳)
- 人工知能関連ニュースの、実際のところシリーズ
- 遺伝的アルゴリズムxニューラルネットワーク(NeuroEvolution)でOpen AI Gymの山登りをさせた話
- 月刊Interface 2017年03月号がTensorFlow大特集になっている話
- 数学の苦手なバイオの学生がCourseraの機械学習コースを修了して気づいたこと
- Tensorflowでブロック崩し
- Chainer2.0が近日リリース またそれとは別の大規模分散処理に対応したChainerもリリースされるらしい
- 機械学習ざっくりまとめ~パーセプトロンからディープラーニングまで~
- PRML第13章 隠れマルコフモデルの最尤推定 Python実装
- 趣味用に安く深層学習PCを作った
- iOSのMetal Performance Shadersでニューラルネットを実行する際のモデルの渡し方
- GPUなしではじめるディープラーニング
- TensorFlowでVGG19を使ってMNISTのエラー画像一覧を作ってみた
- O(log N)の底は何なのか
- 強化学習
- keras(tensorflow)で花の画像から名前を特定
- 自然言語処理における畳み込みニューラルネットワークを用いたモデル
- 普通のpython実行ファイル(argparseを含むファイル)をJupyter notebookで実行するときのメモ書き
- LINQ を使って 8 行で k-means 法を実装してみた
- TensorFlow (ディープラーニング)で為替(FX)の予測をしてみる
- GraphLassoを用いた株式市場の構造学習
- Kerasでfizzbuzz問題を解いてみる
- ゆるふわ強化学習2
- テキスト分類器fastTextを用いた文章の感情極性判定
- Keras with GridSearchCVでパラメータ最適化自動化
- 文系卒社会人が統計入門でのモヤモヤを克服した話
- 例の機械学習コースが良いらしいと知りながらも2年間スルーし続けたがやはり良かったという話
- 機械学習の regularization の訳は正則化 (正規化ではない)
- CPUで気軽に強化学習してみた話(DeepMind A3C)
- 機械学習とディープラーニングの入門者向けコンテンツまとめ
- なぜ機械学習にPythonが選ばれるのか
- 【テキスト分類】Convolutional Neural Networks for Sentence ClassificationをChainerで実装してみた
- ディープじゃない機械学習で為替(FX)の予測をしてみる
- Apache Sparkによる大規模データの分散処理による機械学習(回帰分析) by Amazon EMR
- 機械学習入門時に知っておきたい情報まとめ
- スタートアップ必須のコホート分析を、サバイバル分析の手法で、簡単かつ正確に
- Courseraの機械学習コースを始めるまえに用意しておくこと、覚悟すべきこと
- iOSのMPSCNNに渡すモデルパラメータのフォーマット / TensorFlowからの書き出し
- トピックモデルを操作 ~Interactive Topic Model~
- Cloud Dataflow(Python)で機械学習パイプラインを動かす
- TensorFlowの増大するAPIについて少し考えてみた
- [Python]強化学習(DQN)を実装しながらKerasに慣れる
- ScalaからTensorFlowのJava APIを呼びだすぞい
- Windowsに、オフラインでディープラーニング環境をインストールする(Tensorflow, Keras) ・・・「オフライン環境でのpipインストール方法」と言ってもいいかも・・・
- TensorFlow の “AttributeError: ‘module’ object has no attribute ‘xxxx'” エラーでつまづいてしまう人のための移行ガイド
- Webアプリケーションエンジニアがディープラーニングに挑戦する際にやったこと(Coursera Week1)
- 続々・node.js で社会性フィルター
- PyTorchリンク集
- TensorFlow iOS カメラサンプルで自作した画像分類器を動かす
- ChainerRLでライントレーサーする
- Cloud Dataflow(Python)でXGBoostを動かす
- 機械学習 トレーニングデータの分割と学習・予測・検証
- 文章から特徴量(素性)を抽出する.
- Qwiklabs の NVIDIA ラボで無料ハンズオンを試す
- 今更ながらchainerでSeq2Seq(1)
- kaggleの脳波検出コンペ上位モデルの解説を翻訳
- scikit-learnでモデルのハイパーパラメータチューニングをしよう!
- 今更ながらchainerでSeq2Seq(2)〜Attention Model編〜
- 自然言語処理における、Attentionの耐えられない短さ
- 4時間で「ゼロから作るDeep Learning」を読んで自分で動かしてみた
- 数学の知識がなくてもできる機械学習
- ゲーマーの為のTensorFlow入門
- [Python]KerasをTensorFlowから,TensorFlowをc++から叩いて実行速度を上げる
- 爆勝ちFXシストレ論文「Learning to Trade via Direct Reinforcement」を再現させたい
- Google Cloud DataflowでTensorFlowのGrid Searchをしてみた
- Ubuntu環境上でPyCharmを使った機械学習の環境を構築する(TensorFlowも導入するよ!)
- 会計データを学習して、仕訳の入力時に摘要の内容から勘定科目を予測してみる
- なぜ自然言語処理にとって単語の分散表現は重要なのか?
- scikit-learn でランダムフォレストによる多ラベル分類
- Google Video Intelligence APIのデモを触ってみた
- Getting Started With TensorFlow を翻訳
- 機械学習した結果から予測をHTTPで返す仕組みの一例
- 今更ながらchainerでSeq2Seq(3)〜CopyNet編〜
- Affineレイヤの逆伝播を地道に成分計算する
- 高校数学で理解・実装するニューラルネットワーク
- [改良版]KerasでVAT(Virtual Adversarial Training)を使ってMNISTをやってみる
- pytorch超入門
- GANで文章の生成(Controllable Text Generation – Arxiv.orgより)
- 【決定版】MacでPythonを使って『機械学習』を学ぶための環境構築
- 機械学習ナイーブベイズ分類器のアルゴリズムを理解したのでメモ。そしてPythonで書いてみた。
- Coursera Machine Learning を修了したので、感想を書いてみる
- 実サービスでの機械学習の活用に関するサーベイ
- ニコ動コメントコーパスでkaomoji2vecして顔文字をベクトル表現で扱う
- 【決定版】WindowsでPythonを使って『機械学習』を学ぶための環境構築
- 機械学習の環境を構築するのにAnacondaをインストールする必要はない。Minicondaを使おう
- TensorFlowによるDCGANでロゴ画像を生成してみた
- 教師無しimage to image ”Discover Cross-Domain Relations with Generative Adversarial Networks.” のざっくりした紹介
- TensorFlow (ディープラーニング)で為替(FX)の予測をしてみる CNN編
- MS の Deep Learning Framework CNTK で画風変換~もしも小学生の自分にゴッホを描かせたら?
- ディープラーニングのフレームワークの自作
- ある美女が,どの大学にいそうかを CNN で判別する
- FPGAでDeep Learningしてみる
- テンプレートを使って爆速で機械学習プロジェクトを作成する
- ブラウザで実行できるplaygroundまとめ
- 機械学習に用いるデータセット作成のための画像収集Pythonスクリプト
- Twitter感情分析で株価予測の論文を検証したら約70%の精度で上下予測できた
- ポエム判別器
- 生成モデルで語られる Kullback-Leibler を理解する
- データサイエンス、データ分析、機械学習に必要な数学
- Google Cloud ML EngineをJupyterから簡単に使えるMagic
- 【テキスト分類】Convolutional Neural NetworksにAttention機構を使ってみた。
- 転移学習:機械学習の次のフロンティアへの招待
- 誤差逆伝播法における行列演算まとめ
- ギブスサンプリング実装とJITコンパイラによる高速化
- Chainer で手書き数字認識(MNIST)
- ちょっと距離についてまとめてみた。
- デレマスで機械学習(データ取得編)
- 最小二乗法のアルゴリズムを理解したのでメモ。そしてPythonで書いてみた。
- トランプ氏のツイートを機械学習し、為替の予測をしてみた。〜GCP ML系使い倒し〜
- 【文分類】Convolutional Neural Networksのpooling方法を色々試してみた
- 【DeepAA on Web】ディープラーニングでアスキーアートを”Web上で”作る #DeepAA
- 「わかりやすさ」に注目した、機械学習による技術ブログの検索
- ディープラーニングでイラスト画像分類
- SE, PG系の方がデータ分析、機械学習をやる必要が出た時にまず手にとるべき一冊
- 顔画像から年齢・性別を推定するためのデータセットIMDB-WIKI
- DeepMindのSonnetを触ったので、TensorFlowやKerasと比較しながら解説してみた
- javascriptでお手軽に顔認識できちゃうライブラリ
- TensorFlow の複数プロセスで queue を共有
- deep learning にも使える scikit-learn の概要と便利な機能
- xgboost: テーブルデータに有効な機械学習モデル
- Kerasでちょっと難しいModelやTrainingを実装するときのTips
- KerasでBEGAN(Boundary Equilibrium Generative Adversarial Networks)を実装する
- ノンプログラミングで機械学習サービスが作りたい! テキスト分類編
- word2vecで吉川英治本の感情分析をしてみた
- 誤差逆伝播法等に用いる 計算グラフ の基本パーツ
- FPGAでDeep Learningしてみる – きゅうりを選果する
- 自然言語処理における前処理の種類とその威力
- DEEP PROBABILISTIC PROGRAMMING —”深層学習+ベイズ”のライブラリ— Edwardの紹介
- 週刊少年ジャンプの短命作品を,機械学習で予測する (前編:データ分析)
- 画像の認識 〜 Yolo
- Batch Normalization の理解
- 【決定版】WindowsでPythonを使って『画像処理』を学ぶための環境構築
- Splunkと機械学習(基礎編)
- 人工知能時代の音楽制作への招待 – Google Magenta 解説&体験ハンズオン (自習編) –
- ノンプログラミングで機械学習サービスが作りたい! WebAPI編
- クラスタリング手法のクラスタリング
- BEGAN( + DCGAN )をpytorchで実装して日本人顔の生成
- ノンプログラミングで機械学習サービスが作りたい! フロントエンド編
- GAN(Generative Adversarial Networks)を学習させる際の14のテクニック
- ベイズ最適化のKeras DNNモデルへの適用
- ResNetで料理の材料をあてていく:food2stuff
- 皆んなでやろう。 汎用人工知能 “General AI Challenge” のススメ
- 新規アプリケーションへの深層学習適用のベストプラクティス
- Microsoft の Deep Learning フレームワーク「CNTK」が Python 対応になって格段に使いやすくなってた話
- データの傾向が変わっても性能が落ちにくいモデルの作り方
- CNTKによる、CT画像からガン患者の推定
- 物体認識用データセット作成支援ツール(Faster R-CNNとかSSDとか)
- ある美女が、どこ出身かをディープラーニングで判別する
- 画像変換手法CycleGANでパンダ生成モデルを作った話
- 複数の機械学習ライブラリを一発で適応しちゃう方法
- C#で実装するトップダウン型自動微分
- データの前処理① Imputerとdropnaで欠損値の処理
- 自然言語処理による文書分類の基礎の基礎、トピックモデルを学ぶ
- Watson Retrieve and Rankの公式ツールを利用して質問応答システムを作る (1)
- Watson Retrieve and Rankの公式ツールを利用して質問応答システムを作る (2)
- Google Cloud Vision APIのOCR(画像認識)を検証する
- 行列の積演算で openBLAS cuBLAS を体感する
- 各種正則化から転移学習まで。tensorflowソースコードで見るDL性能改善手法 まとめ(ver 2)
- データ前処理② データを Categorical から Numerical に。
- 素人の言語処理100本ノック:まとめ
- gensim入門
- Modeling Relational Data with Graph Convolutional Networksのまとめ
- Yolo が遅延するのでプロファイラーを使ってみた
- Watson Retrieve and Rankの公式ツールを利用して質問応答システムを作る (3)
- データサイエンス、データ分析、機械学習に必要な数学2
- ディープラーニングでザッカーバーグの顔を識別するAIを作る①(学習データ準備編)
- ロジスティック回帰の数式を分かりやすく解説、、、できたらいいな
- 機械学習の情報を手法を中心にざっくり整理
- ドコモとリクルートの対話
- ディープラーニングでザッカーバーグの顔を識別するAIを作る②(AIモデル構築編)
- Python vs Ruby 『ゼロから作るDeep Learning』 1章 sin関数とcos関数のグラフ
- ディープラーニングでザッカーバーグの顔を識別するAIを作る③(データ学習編)
- ディープラーニングでザッカーバーグの顔を識別するAIを作る④(WEB構築編)
- 回帰と分類の違い
- 音楽と機械学習 前処理編 MFCC ~ メル周波数ケプストラム係数
- 機械学習⑤ アダブースト (AdaBoost) まとめ
- 人工知能は遊戯王カードの価格を予測できるか?
- 次元の呪い (Curse of dimensionality) とは何なのか
- ディープじゃないディープラーニングをNumPyのみで超簡単実装してみた
- 日本語極性判定を作って公開した~SentencePiece版~
- 2017年夏インターンまとめ【データサイエンス】
- 画像を送ると何が写っているのかを返す LINE Bot を GCP で作った話
- 人と対話するロボットを開発するための、研究ガイド
- 人工知能、機械学習、ディープラーニングを昔の自分でもすぐに理解できるように整理してみた
- 機械学習はライブラリを使えれば数学は必要ないのだろうか。生の声を聞いてみた。
- 割と簡単に顔画像を集める方法
- pythonでなんとなく材料研究者の気分を味わおう【pymatgen入門】
- DCGAN-tensorflowで自動画像生成をお手軽に試す
- 文・単語単位の評判分析データセットのまとめ
- 整数値のベクトルをone hot表現に変換
- データサイエンティストを目指すなら、まず最適解をデザインしよう
- 顧客セグメンテーションをクラスタリングのアルゴリズムを使って5分でやってみた
- TensorFlowを中心とした機械学習環境をUbuntuで構築
- 顧客同士の類似性をMDS(多次元尺度構成法)を使って5分で可視化する
- nvidiaのgpuメモリが解放されない場合の解決方法
- ゲームアプリの「ドット絵」をディープラーニングで自動生成する
- Google翻訳における多言語間翻訳の仕組みを転用して、応答時のテンションが変わるチャットボットを作ってみた
- 機械学習チュートリアルまとめ
- VAEでキャラクターの設定を作る。
- 多変量正規分布の場合のKullback Leibler Divergenceの導出
- Microsoft のCustom Vision を使って遊んでみると想像以上に凄そうなサービスだった
- 行列微分のコツ
- R, Python, SAS, SPSSをヨーロッパのデータサイエンティストの視点で比べてみた
- 初めてのTensorFlow(改訂版)- 線形回帰とロジスティック回帰
- 安倍政権による北朝鮮ミサイル打ち上げ関与の陰謀論をデータから検証してみた
- 単語分散表現のためのダウンローダを作りました
- 【翻訳】scikit-learn 0.18 User Guide 1.11. アンサンブルメソッド
- 3×3 畳み込みフィルタ 結果画像
- HTMLファイルで動作するWord2Vecもどきを作った
- TensorFlowを使ってDir en greyの顔分類器を作ってみた – ①紹介編
- GANで犬を猫にできるか~cycleGAN編(1)~
- Excelで作る人工知能
- なぜニューラルネットはSVMに勝てないのか
- 機械学習について
- TensorFlowを使ってぐるなびの株価の終値の上下を予測してみた(途中経過)
- visual studioでtensorflow
- 【iOS 11】開発者ドキュメントから見る iOS 11 の新機能 #WWDC17
- 口コミのdoc2vecを用いたリコメンデーションシステムの構築
- C#でTensorFlowのCNNを動かす。
- ローカル環境をよごさずに Jupyter で python コードが動く環境を手軽につくる方法
- サービスのエンゲージメントをDAU/MAU比率で計測、可視化、予測まで5分でやってみた
- 週刊少年ジャンプの短命作品を,機械学習で予測する (後編:学習と評価)
- iOS11のcoreMLで物体認識(VGG16)を実装してみる(3分クッキング)
- コロナ社「文脈解析」本のレビュー
- Python vs Ruby 『ゼロから作るDeep Learning』 まとめ
- マーケティング・キャンペーンのROIをGoogleが開発したCausal Impactをつかって5分で計測してみる
- 【iOS 11】【Core ML】pip install coremltools でエラーになった場合の対処法
- ITエンジニアのための機械学習理論入門読了者が Kaggle やってみた
- ディープじゃないディープラーニングをperlのPDLのみで超簡単実装してみた
- Watson Assistant(旧 Conversation)で行こう ②ホテル予約 チャットボットを作る
- Unity上でTensorFlowのCNNを動かす。
- 機械学習を学ぶ上で個人的に最強と思う教科書
- シンプルなNNで 学習失敗時の挙動と Batch Normalization の効果を見る
- Udemyで学べる機械学習を全部見てみたんで、お勧め報告
- KerasのstatefulなRNNを使って、wavファイルを元にして自動作曲できないか試してみた
- シンプルなNNで SeLU と eLU と ReLU を見比べてみる
- Kerasでのim2txtの実装系
- macOS Sierraでtensorflowの新しいObject Detection APIを試してみた
- Core ML+Visionを用いた物体認識の最小実装
- Kerasを用いたCIFAR-10チュートリアル
- Watson Assistant(旧 Conversation)で行こう ③コンテキスト(Context)を活用した、ホテル予約チャットボット
- 機械学習で共有スペース利用状況の解析
- 畳み込みニューラルネットの規模と正答率の実験
- 機械学習の超初心者が、みんなが良いと言う記事を読んでまとめてみた
- 最新ディープラーニングアルゴリズムを使って物体検出のチュートリアルを動かしてみた
- 【入門者向け解説】TensorFlowチュートリアルMNIST(初心者向け)
- CVAEによるキャラクターの台詞の生成と、口調変換
- KerasのモデルとTensorFlowの最適化でWasserstein GANを学習する
- 途中分岐するニューラルネットワークの書き方と精度
- 【入門者向け解説】TensorFlow基本構文とコンセプト
- 「自然言語処理シリーズ」まとめ(コロナ社)
- Chainerのレポーティング機能についてまとめてみる
- データサイエンティストを目指して勉強するなら、Kaggleからはじめよう
- SONY謹製DeepLearningライブラリNNablaでCifar10実装してみたヅラ【ニッポン万歳】
- Keras + iOS11 CoreML + Vision Framework による、ももクロ顔識別アプリの開発
- MNISTでハイパーパラメータをいじってloss/accuracyグラフを見てみる
- 楽曲生成ニューラルネットワークを作った話
- DeepLearningで楽曲特徴量を抽出し、タグを予測する
- TensorFlowのiOSサンプルの実行手順(2017年7月現在)
- Lua版 ゼロから作るDeep Learning まとめ
- 『データサイエンティストとマシンラーニングエンジニアはKaggleやれ』というのは何故なのか
- Webエンジニアがやりたいことドリブンで機械学習に入門してみた
- 機械学習、深層学習のプラットフォームの整理
- R で 巨大な Bayesian networks を扱う
- Webカメラで撮った画像中の数字を判別する
- KerasモデルをCloud ML Engineで学習してOnline Predictionしてみた
- 【随時更新】マシンラーニングエンジニアが機械学習、統計学のおすすめ本を紹介する
- 高速な Convolution 処理を目指してみた。 Kn2Image方式
- Convolution処理の手法 Im2Col方式の図解
- 自前のDeep Learning用のデータセットを拡張して水増しする
- ハミルトニアンモンテカルロ法
- XGBoost/LightGBM のGPUサポート状況調査とベンチマーク
- 【TensorBoard入門】TensorFlow処理を見える化して理解を深める
- 不均衡データに対するClassification
- 【ニューラルネットワーク】Dropout(ドロップアウト)についてまとめる
- 【入門者向け解説】TensorFlowチュートリアルDeep MNIST
- DCGANで画像の自動生成
- 【入門者向け解説】畳み込み処理入門(TensorFlowで説明)
- KerasでLSTM AutoEncoderを実装する
- Chainerでアニメキャラクターの顔画像を分類する
- Kerasはfunctional APIもきちんと理解しよう
- Class activation mappingを用いたCNNの可視化
- Kerasで最短で強化学習(reinforcement learning)する with OpenAI Gym
- 機械学習を英語ビデオで学ぶサイトまとめ
- OpenAIの標準強化学習アルゴリズムPPOを試す
- iOSの機械学習フレームワークの比較 – Core ML / Metal Performance Shaders (MPSCNN) / BNNS
- AWS EC2のスポットインスタンスでGPU版tensorflowを動かす
- 仮想通貨取引所のPoloniexからAPI経由でデータ取得し、ディープラーニング(Chainer)で翌日の価格予測をしよう
- KerasでLSGAN書く
- Variational Autoencoder徹底解説
- kerasのmnistのサンプルを読んでみる
- 「Python 機械学習プログラミング」まとめノート(Jupyter)
- 機械学習超入門
- scikit-learnとflaskで簡単な機械学習✕Webアプリ
- 類似顔検索を半日で実装する
- コロナ社「構文解析」本のレビュー
- データサイエンティスト・データエンジニアのための Python ライブラリ一覧
- 機械学習の論文を読んでみたいけど難しそう、という時に見るサイト
- メガネな人を見つめてくれるWebカメラ
- 「ベクトルで微分・行列で微分」公式まとめ
- k近傍法とk平均法の違いと詳細.
- 音声認識をカスタマイズできるMicrosoftのCustom Speech Serviceの使い方
- Microsoftの音声認識技術を本気で検証してみた
- Tensorflowにおける各種演算まとめ
- Keras チュートリアル
- 機械学習の情報収集に役立つ13のメルマガ
- 一から始める機械学習(機械学習概要)
- ごちうさしか見たことない人がけもふれを見るとどんなコメントをするのか,コメントだけで機械はチノちゃんを認識できるのか
- 論文メモ:Virtual Adversarial Training
- KerasでCNNを簡単に構築
- 論文メモ:Understanding Black-box Predictions via Influence Functions
- Windows版Anaconda上でTensorFlow +JupyterNotebook +Matplotlib の環境構築(2017年8月版)
- 自力で機械学習の訓練画像データを収集する(Google Custom Search API ピカチュウ編)
- 台詞発話時の表情を自動判定する
- Kaggle – Instacart上位陣解法まとめ
- 機械学習における、定型的な作業を自動化する
- 【プログラマーのための統計学】 度数分布とヒストグラム
- 【プログラマーのための統計学】目次 – データサイエンス
- 初めての深層学習ロードマップ [随時更新&文献追加 予定]
- はじめてのdeeplearn.js
- crystal でレコメンドエンジンを作った話
- 【プログラマーのための統計学】平均値・中央値・最頻値
- 【プログラマーのための統計学】箱ひげ図
- ゼロから作るDeepLearning by Rust(第三章まで)
- 機械学習を半自動化するauto-sklearnの環境構築(Mac&Docker)
- TensorFlowの基本的な関数をXORゲートを学習するニューラルネットワーク作成してまとめてみる
- 【プログラマーのための統計学】分散と標準偏差と変動係数
- 囲碁プロ棋士の棋譜を眺める
- Kerasで実践的な為替予測をしてみたかった(RNN編)
- 自力で機械学習の訓練画像データを収集する(Tumblr API 吉岡里帆編)
- コスト関数を解読する
- データシティ鯖江のオープンデータを使って水位計の値を機械学習で予測してみる パート2
- 機械学習によるギター画像の分類 その1
- (保存版:ど素人向け) 機械学習/データ分析 読むべき記事リスト by Team AI
- hyperoptって何してんの?
- 文系エンジニアがCourseraの機械学習コースを1ヶ月で修了したので振り返ってみました。
- (保存版:随時更新)データ分析ハッカソンやる時の便利なチュートリアル集 by Team AI
- 速報 : カナダで強化学習中心の深層学習ビデオコースが無料公開
- 正規分布間のKLダイバージェンス
- 機械学習によるギター画像の分類 その2 ~ 学習データへのノイズ付与による識別のロバスト性向上
- 典型的な DP (動的計画法) のパターンを整理 Part 1 ~ ナップサック DP 編 ~
- sklearn.feature_selection による特徴量選択
- 720万手をディープラーニングで学習したオセロAIをChainerで作ってみた

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。