HR(人事)にいるデータサイエンスパパ

HR(人事)データを分析するデータサイエンティスト。日々のデータ周りのことを書きます!

JDLA E資格の参考文献

はじめに

JDLA Deep Learning for ENGINEERを受けるにあたって、参考になった文献をメモしておきます。


E資格とは

日本ディープラーニング協会が実施する資格試験です。 E資格はディープラーニングの理論を理解し、適切な手法を選択して実装する能力を持つ人材」と定義されるようです。
E資格エンジニアと呼ばれるので、エンジニア向けの資格になるかと思います。
(自分はエンジニアではないですが、ディープラーニング周辺分野を扱っていたので、興味があって受けました。)


JDLA認定プログラムを試験日の過去2年以内に修了していることが受験の条件となります。 本試験は会場で受験するCBT方式での受験となります。


以下が試験の範囲になります。(見づらい表ですみません)
こちらは本サイトのシラバスで確認できます。

※JDLA Deep Learning for ENGINEER 2019 #1時点での範囲です。

大項目 中項⽬ 小項⽬
線形代数 特異値分解
確率・統計 ⼀般的な確率分布 ベルヌーイの分布
マルチヌーイの分布
ガウス分布
ベイズ
情報理論 情報理論
機械学習の基礎 学習アルゴリズム タスクT
性能指標P
経験E
能⼒、過剰適合、過少適合
ハイパーパラメータ
検証集合 学習データ、検証データ、テストデータ
ホールドアウト法
k-分割交差検証法
最尤推定 条件付き対数尤度と平均⼆乗誤差
最尤法の特性
教師あり学習アルゴリズム ロジスティック回帰
サポートベクトルマシン
最近傍法、k近傍法
教師なし学習アルゴリズム 主成分分析
k平均クラスタリング
確率的勾配降下法
深層学習の発展を促す課題 次元の呪い
局所⼀様と平滑化
実用的な方法論 性能指標
データの追加収集の判断
ハイパーパラメータの選択 ⼿動でのハイパーパラメータ調整
グリッドサーチ
ランダムサーチ
モデルに基づくハイパーパラメータの最適化
順伝播型ネットワーク 線形問題と⾮線形問題
コスト関数 最尤推定による条件付き分布の学習
条件付き統計量の学習
出力ユニット ガウス出⼒分布のための線形ユニット
ベルヌーイ出⼒分布のためのシグモイドユニット
マルチヌーイ出⼒分布のためのソフトマックスユニット
隠れユニット ReLUとその⼀般化
ロジスティックシグモイドとハイパボリックタンジェント
その他の隠れユニット(RBF、ソフトプラス、Hard)
アーキテクチャの設計 万能近似定理と深さ
誤差逆伝播法およびその他の微分アルゴリズム 計算グラフ
微積分の連鎖律
誤差逆伝播のための連鎖律の再帰的な適⽤
全結合MLPでの誤差逆伝播
シンボル間の微分
⼀般的な誤差逆伝播
深層モデルのための正則化 パラメータノルムペナルティー L2パラメータ正則化
L1正則化
条件付き最適化としてのノルムペナルティ
正則化と制約不⾜問題
データ集合の拡張
ノイズに対する頑健性 出⼒⽬標へのノイズ注⼊
教師あり学習
マルチタスク学習
早期終了
パラメータ拘束とパラメータ共有
スパース表現
バギングやその他のアンサンブル⼿法
ドロップアウト
深層モデルのための最適化 学習と純粋な最適化の差異 経験損失最⼩化
代理損失関数と早期終了
バッチアルゴリズムとミニバッチアルゴリズム
ニューラルネットワーク最適化問題 悪条件
局所値
プラトー、鞍点、その他平坦な領域
崖と勾配爆発
⻑期依存性
不正確な勾配
基本的なアルゴリズム 確率的勾配降下法
モメンタム
ネステロフのモメンタム
パラメータの初期化戦略
適応的な学習率を持つアルゴリズム AdaGrad
RMSrop
Adam
二次手法の近似 ニュートン法
共役勾配
BFGS
最適化戦略とメタアルゴリズム バッチ正規化
教師あり事前学習
畳み込みネットワーク 畳み込み処理
プーリング
構造出⼒
データの種類
効率的な畳み込みアルゴリズム
ランダムあるいは教師なし特徴量
画像認識の有名なモデル VGG
AlexNet
GoogLeNet
Resnet
特徴量の転移
画像の局在化、検知、セグメンテーション
回帰結合型ニューラルネットワーク再帰的ネットワーク 回帰結合型のニューラルネットワーク 教師強制と出⼒回帰のあるネットワーク
回帰結合型ネットワークにおける勾配計算(BPTT)
有向グラフィカルモデルとしての回帰結合型のネットワーク
RNNを使った⽂脈で条件付けされた系列モデリング
双⽅向RNN
Encoder-DecoderとSequence-to-Sequence
深層回帰結合型のネットワーク
再帰ニューラルネットワーク
⻑期依存性の課題
エコーステートネットワーク
複数時間スケールのためのLeakyユニットとその他の⼿法 時間⽅向にスキップ接続を追加
Leakyユニットと異なる時間スケールのスペクトル
接続の削除
ゲート付きRNN LSTM
GRU
⻑期依存性の最適化 勾配のクリッピング
⾃然⾔語処理とRNN
メモリネットワーク Attention
生成モデル 識別モデルと⽣成モデル
オートエンコーダ VAE
GAN DCGAN
強化学習 ⽅策勾配法
価値反復法 DQN


応用数学機械学習ディープラーニングの内容で、範囲は比較的広いです。


参考になった文献


①ゼロから作るDeep LearningPythonで学ぶディープラーニングの理論と実装

ディープラーニングの本格的な入門書です。外部のライブラリに頼らずにゼロからディープラーニングを作り、原理を学べます。E資格も外部のライブラリに依存しない出題がされるので、とても参考になりました。内容としては、Pythonの入門/パーセプトロン/ニューラルネットワーク/誤差逆伝播法/畳み込みネットワークなどの実装が書かれており、画像処理がメインの本になります。


②ゼロから作るDeep Learning ❷ ―自然言語処理

①の続編になります。こちらも外部のライブラリに頼らずにゼロからディープラーニングを作り、原理を学べます。内容は自然言語処理や時系列データ処理でword2vec/RNN/LSTM/GRU/seq2seq/Attentionなどの実装が書かれています。

ゼロから作るDeep Learning ? ―自然言語処理編

ゼロから作るDeep Learning ? ―自然言語処理編


③深層学習

JDLAからの参考図書になります。分厚い本なので全てを網羅することは難しいとは思いますが、数式の表記がE資格で出題される形式と同じなので、出題されそうなテーマの数式は見ておくといいです。一見難しそうに見えますが、丁寧に分かりやすい表現で書かれていて、ある程度知識が付いた後に読むと理解でき、ディープラーニングに関する理解が深まりました。

深層学習

深層学習

  • 作者: Ian Goodfellow,Yoshua Bengio,Aaron Courville,岩澤有祐,鈴木雅大,中山浩太郎,松尾豊,味曽野雅史,黒滝紘生,保住純,野中尚輝,河野慎,冨山翔司,角田貴大
  • 出版社/メーカー: KADOKAWA
  • 発売日: 2018/03/07
  • メディア: 単行本
  • この商品を含むブログ (1件) を見る


④徹底攻略 ディープラーニングG検定 ジェネラリスト問題集

G検定の問題集です。E資格の内容に直接は関わらないかもしれませんが、実装ベースの勉強が多くなるので、忘れがちな基本的なディープラーニング周辺知識の復習に活用できました。

徹底攻略 ディープラーニングG検定 ジェネラリスト問題集

徹底攻略 ディープラーニングG検定 ジェネラリスト問題集


まとめ

参考文献を中心に学習し、無事にE資格に受かることができました。
最近できた資格のため、これから認知度は上がっていくと思いますし、一定の水準で実装能力があることを示せるので、個人的にはおすすめの資格です。学んだことを元に、外部ライブラリを使い、自分野での活用を模索したいと思います。


juliaで単回帰を実装してみた

はじめに

juliaで単回帰をフルスクラッチで実装してみました。
juliaの理解促進のために勢いで書いたので、間違いがあると思います笑

間違いや改善点があったら教えていただけると嬉しすぎます。


実装

以下のようにmoduleで実装しました。

module SelfSingleLinerRegression
    
using Printf
using Distributions
    
mutable struct SelfSingleLinerRegressionModel
    ETA::Float64
    cnt::Int64
    loss::Float64 #lossは0
    theta_0::Float64
    theta_1::Float64
    X
    y
end
    
function fit(model::SelfSingleLinerRegressionModel)
    
    for i in 1:model.cnt
        
        model.theta_0 -= model.ETA*sum((model.theta_0 .+ model.X.*model.theta_1) - model.y)
        model.theta_1 -= model.ETA*sum(((model.theta_0 .+ model.X.*model.theta_1) - model.y).*model.X)
        
        if i % 200 == 0
            model.loss = 0.5*sum((model.y .- (model.theta_0 .+ model.X.*model.theta_1)).^2)
            __print(i, model.theta_0, model.theta_1, model.loss)
        end
        
    end
    
end
    
function predict(model::SelfSingleLinerRegressionModel, X::Array)
    return model.theta_0 .+ X.*model.theta_1
end
            
function __print(cnt, theta_0, theta_1, loss)
    @printf("cnt: %.0f, theta_0: %.2f, theta_1: %.2f, loss: %.2f\n", cnt, theta_0, theta_1, loss)
end
    
end

方程式で解いてもいいのですが、今回は勾配降下法を用いました。
最急降下法で実装しているので、繊細なハイパーパラメータの調整が必要となっています笑


実際のデータに当てはめてみます。
学習率:0.001/学習の繰り返し回数:10000にします。

X = [1.0, 2.0, 3.0, 4.0, 5.0]
y = [20.2, 24.2, 32.4, 36.4, 40.1]

reg = SelfSingleLinerRegression.SelfSingleLinerRegressionModel(0.001, 10000, 0, rand(), rand(), X, y)
SelfSingleLinerRegression.fit(reg)

出力の最終行は以下になりました。

cnt: 10000, theta_0: 15.06, theta_1: 5.20, loss: 2.92


確認のためGLMライブラリの結果と照合してみます。

using DataFrames, GLM

df = DataFrame(X=X, y=y)
ols = lm(@formula(y ~ X), df)

以下が結果です。

StatsModels.DataFrameRegressionModel{LinearModel{LmResp{Array{Float64,1}},DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}

Formula: y ~ 1 + X

Coefficients:
             Estimate Std.Error t value Pr(>|t|)
(Intercept)     15.06   1.46233 10.2987   0.0020
X                 5.2  0.440908 11.7938   0.0013

結果が一致しました!


まとめ

いくつかのデータセットで試してみましたが、収束しないことが多々あったので、データによっては全く使えないコードです汗
最急降下法じゃない実装も今後やっていきたいと思います。


juliaの書き方などの面でなにか参考になるものがあれば嬉しいです笑

はてなブログでTex記法を使うときのメモ

はじめに

はてなブログMarkdown方式で数式を書くにあたり、まとめとしてメモしておきます。 単純な数式なら表現できますが、はてな記法でなくては表現できない数式もあるみたいです。

用法

基本ルール
  • tex記法
  • ^_\エスケープする(または^は次の文字を{}で囲む)
  • []\\エスケープ
基本的な数式


y = ax^2 + bx + c

[tex:y = ax\^2 + bx + c]

分数


\displaystyle
\frac{x^3+1}{x+1}

[tex:\displaystyle \frac{x\^3 + 1}{x + 1}]

[tex:\displaystyle \frac{分子}{分母}]

上付き文字


x^{a}

[tex:x\^{a}]

下付き文字


x_{ij}

[tex:x\_{ij}]

根号


\sqrt[n]{x}

[tex:\sqrt\\[n\\]{x}]

対数


\log_{n} x

[tex:\log\_{n} x]

総和


\displaystyle
\sum_{i=1}^{n} x_i

[tex:\displaystyle \sum\_{i=1}\^{n} x\_i]

総乗


\displaystyle
\prod_{i=0}^n x_i

[tex:\displaystyle \prod\_{i=0}\^n x\_i]

微分


\displaystyle
y'=t^2+3t+4\\y''=2t+3\\ \displaystyle \frac{dy}{dx}=x^2+3x+4\\ \displaystyle \frac{\partial f}{\partial x} =x^2+xy

[tex:\displaystyley'=t\^2+3t+4\\\y''=2t+3\\\ \displaystyle \frac{dy}{dx}=x\^2+3x+4\\\ \displaystyle \frac{\partial f}{\partial x} =x\^2+xy]

積分


\displaystyle
\int_{b}^{a}x^2 dx

[tex:\displaystyle \int_{b}^{a}x\^2 dx]

まとめ

Markdownで数式を表現するには限界があるらしい。(行列表現する際の「&」表現などができない?) &になってしまう事象の解決策はないのだろうか、、、

参考:

はてブmarkdown記法で数式を記述する方法 - 緑茶思考ブログ

LaTeX - コマンド一覧

はてなブログのTeX記法で数式を書く時用のチートシートと注意点 - ぴよぴよ.py

Peeple Analyticsに活かすHR(人事)データの溜め方

はじめに

Peeple Analyticsにおいてデータは命なので、HR(人事)データのカテゴリーと、データの溜め方に関して整理しました。

HRデータは担当者によって、資料に使う記述統計から機械学習モデルの構築まで幅広く用途があるので、個人的には各担当者の使いやすさのバランスを重視してデータを管理していく方がいいかなと思います。

 

HRデータのカテゴリー一覧 

 

HRデータのカテゴリー
カテゴリー
データ例
採用データ
ES・資格・スキル・選考評価・職務経歴書
社員データ(固定)
性別・生年月日・学歴・適性検査
社員データ(変動)
年齢・婚姻歴・在籍期間・職種・職務内容・志向
勤怠データ
出退勤・遅刻・欠勤・有給休暇
組織データ
所属組織・組織人数・職種・上司・メンバー
育成/研修データ
研修種別・受講歴
行動データ
異動希望・面談歴・イベント参加歴・その他ログ
給与データ
給与・賞与・インセンティブ
評価データ
人事考課・査定・等級
退職データ
退職歴・退職理由・転職先
アルムナイデータ
(転職先での)評価/エンゲージメント

 

HRデータは定期的に変動するデータが多いので、履歴データとして溜めていく必要があります。データが不変か可変かどうかで保持するテーブルを変えていくといいです。


評価データや退職データはKPIになることが多く、統計的な分析や機械学習モデリングする際に目的変数としてよく使われます。いずれも過去データを用いて示唆を示すので、過去の事象が現在でも言えるものなのか、BIツールなどを活用し、時系列での変動を確認することが大切です。


最近ではセンサーデータを活用する事例もあり、HRデータの幅は広がっています。難しいですが、アラムナイデータも取得できるようになると、採用において強力なタレントプールになります。  

 

HRデータの溜め方

HRデータは各社で導入しているシステムやデータの保管状況により、扱えるデータは各社で割と色が出ると思います。


収集コストの高いデータもあるので、解決したい課題に合わせて、データを集めていくのが良いかなと思います。過去データの収集はテクノロジーでも解決できない部分が多いので、かなりの気合いが必要です笑 それと合わせて自然とデータが溜まっていく仕組みを作るのはHR担当者の腕の見せ所ではないでしょうか。


私の会社では分析基盤として、HRデータの分析専用のデータベースを構築しています。
RDBMSで一括管理しており、手早く分析できるように数値変換した状態でデータベースに保存するようにしています。(データ活用にそこまで強くない担当者でもすぐに活用できることを優先して、DB設計は第二正規化までにしています。)

 

Excelで管理する会社も多いですが、データが各所に散在してしまうので、絶対的なデータとして分析用のデータベースを構築するのはおすすめです。(SQLはある程度書けるようにならなくてはいけませんが。)

 

最近では割とデータ量が多くなってきたので(ビッグデータと呼べるほどでは全くないですが)、専任のデータエンジニアがいてくれると嬉しいと思っています笑

 

Profile (2018.12)

仕事

都内企業のHR部門で働いています。

HRのデータベース基盤の構築や、HR課題に対して統計学機械学習を活用したソリューションの提供をしています。webアプリの開発もします。

R, python, SQLあたりをメインに使っています。

キーワード

HR / HRテック / HRテクノロジー / People Analytics / Data Science / 機械学習 / 統計学 / JDLA E資格 / JDLA G検定 / 統計検定 / Python / R / SQL / julia / GAS / VBA / Django(webアプリ)


(少し) js / CSS / After Effects / Photoshop

その他

気付いたことなどお気軽にコメントいただけると嬉しいです!

またこのブログの投稿内容は私個人の見解であり、所属企業・部門見解を代表するものではありません!