0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Juliaで学ぶ人工知能 #1

Last updated at Posted at 2022-12-03

パーセプトロンとは

パーセプトロンは、人工ニューラルネットワークの基本的なモデルです。パーセプトロンは、入力値を入力ユニットに与え、その出力値を出力ユニットに出力することで、分類や回帰などの様々なタスクを行うことができます。

例えば、画像認識タスクでは、入力データとして画像が与えられます。そして、パーセプトロンは、その画像が「猫」か「犬」かを分類するモデルとして実装されます。

以下はjuliaでパーセプトロンを行列演算で書くことができます。以下は、juliaでパーセプトロンを行列演算で実装する例です。

# パーセプトロンを行列演算で実装する

using LinearAlgebra

# 入力データ
x = [0.0 1.0;
     0.0 0.0;
     1.0 1.0;
     1.0 0.0]

# 入力データに対する正解ラベル
y = [0; 0; 0; 1]

# 重みを行列として定義する
w = rand(2, 1)

# バイアスを定義する
b = rand()

# シグモイド関数
function sigmoid(x)
  1 / (1 + exp(-x))
end

# パーセプトロンの出力を計算する
output = sigmoid.(x * w + b)

# 出力と正解ラベルを比較して、正解率を計算する
accuracy = sum(output .== y) / length(y)

# 正解率を表示する
println(accuracy)

単純パーセプトロンと多層パーセプトロン

単純パーセプトロンは、入力データが与えられると、それが特定のクラスに属するかどうかを判定するモデルです。単純パーセプトロンは、単層から構成されるニューラルネットワークモデルです。

単純パーセプトロンと多層パーセプトロンの違いは、構造が異なることです。単純パーセプトロンは、単層から構成されますが、多層パーセプトロンは、複数の層から構成されます。また、多層パーセプトロンは、単純パーセプトロンよりも高い汎化能力を持っており、より複雑なタスクに対応することができます。

上記のコードは単層パーセプトロンの例になります。

多層パーセプトロンの例

juliaで多層パーセプトロンを実装する例を示します。

# 多層パーセプトロンを実装する

using Flux

# 入力データ
x = [0.0 1.0;
     0.0 0.0;
     1.0 1.0;
     1.0 0.0]

# 入力データに対する正解ラベル
y = [0; 0; 0; 1]

# 多層パーセプトロンを構築する
m = Chain(Dense(2, 10, σ),
          Dense(10, 10, σ),
          Dense(10, 1, σ))

# 多層パーセプトロンを学習させる
Flux.train!(m, x, y, SGD(0.1))

# 多層パーセプトロンの出力を計算する
output = Flux.data(m(x))

# 出力と正解ラベルを比較して、正解率を計算する
accuracy = sum(output .== y) / length(y)

# 正解率を表示する
println(accuracy)

このようにして、juliaで多層パーセプトロンを実装することができます。 Flux.jlを使用することで、juliaで簡単に多層パーセプトロンを構築し、学習させることができます。

多層パーセプトロンの例(行列演算)

# 多層パーセプトロンを実装する

# 入力データ
x = [0.0 1.0;
     0.0 0.0;
     1.0 1.0;
     1.0 0.0]

# 入力データに対する正解ラベル
y = [0; 0; 0; 1]

# 重みを行列として定義する
w1 = rand(2, 3)
w2 = rand(3, 1)

# バイアスを定義する
b1 = rand(3)
b2 = rand()

# シグモイド関数
function sigmoid(x)
  1 / (1 + exp(-x))
end

# パーセプトロンの出力を計算する
h1 = sigmoid.(x * w1 .+ b1)
output = sigmoid.(h1 * w2 .+ b2)

# 出力と正解ラベルを比較して、正解率を計算する
accuracy = sum(output .== y) / length(y)

# 正解率を表示する
println(accuracy)

このようにして、juliaで多層パーセプトロンを実装することができます。Flux.jlを使用しない場合でも、手動で重みとバイアスを初期化し、各層の出力を計算することで、多層パーセプトロンを実装することができます。

参考図書

1から始めるプログラミング

Juliaプログラミングクックブック

天才プログラマー タンメイが教える Julia超入門

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
※Pythonで書かれています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?