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・スマホ系エンジニアを積極採用中です!
※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

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



ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事

初心者が3ヶ月でどれくらいプログラミングができるようになるのか

採用情報

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

バックエンドエンジニア

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

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

\ 世界はお前の手の中に・・・ /

モバイルエンジニア

\ サービスの守り神! /

インフラエンジニア

初心者が3ヶ月でどれくらいプログラミングができるようになるのか

初心者が3ヶ月でどれくらいプログラミングができるようになるのか