1. HOME
  2. ブログ
  3. IT技術
  4. Julia入門~高速な動的型付け言語~【Fluxでの機械学習編】
Julia入門~高速な動的型付け言語~【Fluxでの機械学習編】

Julia入門~高速な動的型付け言語~【Fluxでの機械学習編】

Fluxで機械学習編~Juliaに入門してみよう~

前回は、Julia と Jupyter Notebook を連携して、グラフ描画する方法を紹介しました。

今回は、Julia の機械学習フレームワーク「Flux」を紹介していきます!

※本記事で使用するのは、「Julia ver 1.5」です。

こちらの記事もオススメ!


Fluxをインストールする

Flux は、Julia 向けに提供されている、機械学習フレームワーク。

Github の README を読むと、

Flux は100% Julia で書かれており、簡単に機械学習モデルを構築できる。

と、記載されています。

【Github:Flux】
https://github.com/FluxML/Flux.jl

ちなみに、今回は試しませんが、GPU コンピューティングもできるそうです。

機械学習フレームワークでは、なかなかの完成度と言えそうですね!

インストール

いつも通り、パッケージモードで追加します。

これだけで OK です。

本記事では、執筆時点で最新の「v 0.11.0」を使用しています。

Fluxを使ってみる!

それでは早速、Jupyter Notebook を立ち上げて、実際に触ってみましょう!

まずは、Flux を読み込みます。

そこそこ時間がかかりますが、気長に待ちましょう…

基本演算 (勾配演算)

Julia は、数学演算に特化しているため、「勾配計算」も Flux と組み合わせれば、簡単に計算ができます。

もちろん、多変数関数の微分もできますし、一度にまとめて計算することもできます。

ただ、機械学習でのパラメータ数は、「何百・何千・何万」という単位ですので、いちいち計算してられませんね…。

一方の Flux では、パラメータを一つにまとめることができるので、手間が省けるのです。

単純なモデルで試してみる

それでは、少し機械学習寄りのコードも書いてみましょう!

線分回帰モデルを試す

ここでは、シンプルな「線形回帰モデル」を定義していきます。

上のコードを見ると、 .+ や .- という表記が気になるかもしれません。

これは、加減演算子が関数として定義されているためで、配列データなどを繰り返し計算するために、ドット . をつけています。

今はまだ、ランダムで初期化された「重み」と「バイアス」なので、誤差がかなり大きいですね…。

勾配降下法を実装する

誤差が大きいので、勾配を計算して、「勾配降下法」を実装してみます。

この勾配の計算は、以下のような書き方でも、同じ意味になります。

次は、勾配降下法で、一度だけ重みを更新してみましょう!

しっかりと、誤差が小さくなっていますね!

コード量としては、かなり少ないのにもかかわらず、簡単に勾配計算ができてしまいました。

この線形回帰モデルのコードは、以下のとおり、たったこれだけです。

とてもコンパクトですね!

層を定義してみる

機械学習といえば、ニューラルネットワークで、多層にしたモデルが一般的です。

それを、Flux で単純に実装していきましょう!

コード自体は、とてもシンプルで、実際に適切に動作します。

ただ、もし多層にしたくなったとき、少し面倒ですね…

これを回避するために、一つのアイデアとして、以下のように関数で全結合層を定義すると良いでしょう。

かなりシンプルで、可読性に長けた形になりました!

ちなみFlux では、 Dense() という名前で、すでに全結合層が用意されています

層を積み上げてみる

それでは、Flux に用意されている便利な機能を存分に使って、ネットワークを構築してみます。

例えば、3層のニューラルネットワークであれば、以下のコードだけでOKです。

Flux では、モデルを単なる関数として扱える点が、大きな特徴です。

PyTorch なんかもそうですが、「パラメータアクセスができる関数」といったところでしょうか。

さいごに

今回は、Juila の機械学習フレームワーク Flux について、簡単に紹介しました。

「何かしらデータセットを学習させて…」といったことはしませんでしたが、Flux の使い勝手の良さが、少なからず伝わったかと思います。

ちなみに、公式ドキュメントでは、他にも充実した実装サンプルが掲載されています。

もし、興味を持った方は、ぜひ試してみてくださいね!

【 Flux 公式サイト】
https://fluxml.ai/Flux.jl/stable/

さて、今回で「高速な動的型付け言語 Julia に入門する」シリーズは終わりになります。

今後また、応用編として、Julia の記事を書くかもしれません。

その時をお楽しみに!

記事を書いた人

\ 3度のメシより技術が好き /
(株)ライトコードは、WEB・アプリ・ゲーム開発に強い「好きを仕事にするエンジニア集団」です。
システム開発依頼・お見積もりはこちらまでお願いします。
また、WEB・スマホ系エンジニアを積極採用中です!
※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

こちらの記事もオススメ!



書いた人はこんな人

ライトコード社員ブログ
ライトコード社員ブログ
「好きなことを仕事にするエンジニア集団」の(株)ライトコードです!
ライトコードは、福岡本社、東京オフィスの2拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。

システム開発依頼・お見積もりは大歓迎!
また、WEBエンジニアとモバイルエンジニアも積極採用中です!

ご応募をお待ちしております!

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界を変える…! /

Androidエンジニア

\ みんなが使うアプリを創る /

iOSエンジニア