Real World Annotator

Machine Learning, Statistics, Finance, and Everyday Life.

第149回簿記2級を受けました

実は先月第149回簿記2級の試験を受け,無事合格した(良かった...w). 合格点70点,合格率15%前後の試験だったが,90点と少々オーバーキル気味の点数での合格だった. 受けたのは良いものの,何かこうやって一筆書かないと将来残るものがないなと考え,いざブログに.

簿記って何?

まず以下は日本商工会議所の出している簿記の定義である*1

簿記は,企業規模の大小や業種,業態を問わずに,日々の経営活動を記録・計算・整理して,経営成績と財政状態を明らかにする技能です. 簿記を理解することによって,企業の経理事務に必要な会計知識だけではなく,財務諸表を読む力,基礎的な経営管理や分析力が身につきます. また,ビジネスの基本であるコスト感覚も身につきますので,コストを意識した仕事ができるとともに,取引先の経営状況を把握できるために,経理担当者だけではなく,全ての社会人に役立ちます.

主観も入るが,簡単に言ってしまえば,簿記を勉強すると

  • 企業の経営成績・財政状態を理解できる(この企業はどのくらい儲けているのか or 損しているのか)
  • 企業でのお金の流れ・記帳の流れを理解できる
  • 経理の人の血と涙と汗を体感できる

ということになる.

そもそも何で受けたの?

来年から金融機関に就職するわけだが,会社から入社前までに受けろと言われたので. 別に自分から受けたかった訳ではない.

簿記2級は難しいの?

結論として,難しいか難しくないかでいえば,決して難しくはない公認会計士試験・司法試験・国家医師試験などと比べても全然量も少なく,問題も恐らく難しくはないだろう. きちんと教科書を読み,きちんと問題演習を積めば,大半の人は合格できると筆者は思っている. しかし,この後でも話すが,モチベーションを保持できるか否かが正直合格の鍵になってくる.

簿記2級を受けての良かったこと・悪かったこと

正直良かったことも悪かったことも両方ある(悪かったことが若干多いような...).

良かったこと

  • 今まで企業のお金の動きや記帳などが全く分からなかった筆者だが,それを何となく理解することができた
  • 端数利息や減価償却など,今まで謎だったものを理解することができた
  • 中高の社会で勉強した売上総利益・営業利益・経常利益・当期純利益などの用語の意味を理解することができた
  • 先人たちが,お金の計算をミスらないようにするために記帳時に凝らした工夫の結晶を感じ取ることができた
  • 来年の就職先にドヤ顔で「資格取ったど〜」と言い張ることができる

悪かったこと

  • そもそも今のご時世電卓叩いて経理やっている人なんかおるんか!?こんなんExcel叩けばええやんけw
  • 結局簿記勉強したは良いものの,別に企業の財務諸表を今ぱっと渡されても企業の財務状況を理解できるわけでない(これが一番大切な気がするのにそこが身についていないのがもどかしい...)
  • 時間かかりすぎ〜〜〜

受けた最終的な感想を!

うーん.為になったか為になっていないかでいえば為になったとは思う. ただ,明らかにコスパは悪い気がする. 筆者は金融や会計の知識が皆無だったので,簿記3級の勉強から始めた訳だが,最終的に勉強時間としては200~300時間くらいかかった気がする. これで受かってたから良かったものの,万が一にも落ちてしまっていたら,次に受けられるのは11月...約半年後... これは100%忘れる自信あるし,リスクも高いw しかも上で書いたように,別に簿記を受けると全てが全て良い訳でもなく,悪い点にもたくさん気づくから,モチベーションを維持するのが大変. 300時間,そこまでやりたくないこと,続けられますか!?

ただ,受かったものは受かったので,本当に良かったw これからは,読者の要望があれば,ちょろっと簿記について書いていきたいと思う.

niltatsu

機械学習初学者がつまずく理由

機械学習は正直難しい(こういうと物理屋さんとか数学屋さんに怒られるかもしれないけど). 機械学習を勉強して4年経っても未だに難しいと思う. ただここ最近,何で難しく思えるのだろうか,そしてそもそもどういうポイントで躓くのかについて,なんとなく考えてみたので,ここで書いていきたいと思う.

記法の非統一性

勉強する本によって記法が統一的でないことが多々ある. もちろん同じことであっても違う本・違う著者で違う文字を置く,というのはしょうがない部分であるかもしれない. バックグラウンドの異なる著者が自分の慣習,そして何かしらの意図をもって置いているのだから. 時間をかけ,慣れればそう大きな問題ではない. しかし,やはり初学者にとってその対応関係を見抜くのは至難の技である. まだ機械学習をはじめて間もなかった筆者はかつて次のような記述をとある本*1で読んだ:

(前略)入力ベクトル$\bm{x}$と対応する目標変数$t$があり,出力変数$t$はクラス$C_k$のいずれかを表す.(中略)与えられた$\bm{x}$に対し,各クラスの事後確率 $$ p(C_k | \bm{x}) $$ を求めたい.(後略)

また次のような記述もよく見かける:

(前略)ここで,データ$\bm{x}$に対応するラベルを$y$とおき,データ$\bm{x}$のラベルが$y$である確率を $$ p(y | \bm{x}) $$ とする.(後略)

そのとき筆者は考えた. 「ラベル?クラス?これらは異なるものなのだろうか.まあ$C_k$と$y$と文字も違うし,別物なのかな?」と. しかしそのあとの議論はほぼ同じ展開. 「???」が頭の中をよぎる. よう分からんので,ネットで調べるとMulticlassとMultilabelは全く別のタスクであることが分かった. 「じゃあやっぱり違うのか...!?」 さらに調べると$y$を「訓練出力」などと呼んでいる本もあった.

こうやって筆者は記法や名称の果てしない迷宮の中に彷徨いこんでしまった. このような本による記法の差は間違いなく初心者の心をくじけさせる要因になっていると思う.

ではどうすれば良いのか. 正直,本の著者達が出版する前に一回名称や記法を統一する会を開くのが最も良い. しかし,これはあまりにも非現実的である. 結局この点に関して初心者ができることがあるとすれば,身の回りに機械学習の詳しい人にたくさん聞くことくらいだろうか.

うーん,もう少し良い方法がないだろうか...

様々な「流派」の本の出回り

これは前節と似たような話かもしれないが,それぞれの本にはそれぞれの「流派」がある. 例えばかの有名な「パターン認識機械学習(PRML)」の著者であるBishopさんは典型的なベイズ論者だ. ゆえにPRMLの中身はかなりベイズに偏っている. PRMLは今や機械学習界の名著であり,輪読会なども各地で行われているが,この一冊を通読することは果たして本当に有意義なのかは筆者は疑問である. 特に初心者にとって最も重要なのは「どのような問題設定があるのか」「どのような手法があるのか」を知ることなので,特定の流派に偏った本を通読するのはあまりいただけない.

そこで機械学習初心者に筆者がオススメしているのが「広く浅く」見ることである. 特定の本に縛られず,「つまみ食い」をした方が視野が広まるし,そっちの方が挫折しにくい. 「なんとなく」概要を掴んで,後日自分の興味のある部分について掘り下げた方が遥かに有意義である.

過度な省略

個人的にこれは今も苦しんでいる部分であるが,専門家による過度の省略が横行している気がする. その代表例が期待値だと思っている. さて,以下はとある本の記述なのだが,みなさんどう考えるだろうか: $$ \mathbb{E} [L(f(x), y)] $$ 初学者だった筆者「ふむふむ,なるほど,損失関数があって,それについての期待値をとるのね.簡単〜!」 しかし後日他の本でまた以下のような別の記述を見つけた: $$ \mathbb{E}_{p(y|x)} [L(f(x), y)] $$

この筆者はこう思った「あれ,そういえばこれって何についての期待値なのだろうか...」と. 上の式とその次の式の差は一体何だろうか.同じなのだろうか. それぞれの本の文脈的に照らし合わせると答えとしては1本目の式は$(x, y) \sim p(x, y)$と,$(x, y)$についての期待値であり,2本目の式は$x$を一つ固定し,$y \sim p(y|x)$についての期待値ということになる. 似たような式だが,それぞれが意味することは全く異なるのだ.

個人的に,期待値はこのように分かった気にさせるランキング1位の数学概念だと思っている. 大学入って間もない頃はその定義の簡単さから,さらっと勉強を終わらせてしまうが,いざ機械学習や統計の専門的な部分になってくると,途端に意味が不明瞭になってくる.

なぜこのような現象が起こるのか. 個人的には過度な省略が原因だと思っている. 期待値というのは確率変数ありきで,どの確率変数について期待値を取るかによって意味が全く異なってくる. 今でも論文読んでて,「これって何について期待値取ってるんだろう...」と迷うタイミングが多々ある. 個人的には $$ \mathbb{E}_{Y \sim p(Y|X=x)} [L(f(X), Y)], \ \mathbb{E}_{(X, Y) \sim p(X, Y)} [L(f(X), Y)] $$ とまで書いてもらうのがありがたいのだが,なんとかならないものだろうか... また,最適化問題における最適化変数の省略など,過度な省略由来のとっつきにくさも機械学習挫折の大きな一因になっている気がする.

範囲の広さ

機械学習を勉強する上で一体何の知識が必要なのだろうか. 最適化?確率?統計?線形代数微積分?だけで十分だろうか. 確かに,機械学習を勉強する上で線形代数などの比較的応用部分をいちいち勉強しなくては行けなくて大変... しかし,残念ながら機械学習は上の分野で収まるような甘い分野ではない. 今まで筆者が機械学習を勉強してきて,「これを勉強すれば良かったな...」と思える分野を列挙していくと:

うーん...最適化や確率などの「ベタな数学」以外にも色々な数学があるのかと感心. さらには物理とかも絡んできたりするのか... もちろんここまでくると機械学習上級者なのかもしれないが,やはり「最低限」として要求される知識が多いのは間違いない.

こればかりは「勉強する」こと以外に方法はない気がする. しかし,そこまで深くのめりこまず,「広く浅く」勉強することが大切な気がする.

アルゴリズムと実装との乖離

機械学習では様々なアルゴリズムが紹介されるが,いざ実装しようとすると案外難しい. 筆者が初めて実装しようとしたアルゴリズムSVMで,よく本やwebサイトなどで,

以下の最適化問題二次計画法を用いて解くことができる. $$ \begin{aligned} \min_{\bm{w}, \bm{\xi}}\ \frac{1}{2} || \bm{w} ||^2 + \lambda \sum_{i=1}^n \xi_i \ \ \ \mathrm{s.t.}\ \ \ \xi_i \geq 0,\ \ \ \xi_i \geq 1 - y_i(\bm{w}^\top \bm{x}_i + b)\ \ \ (i = 1,2,\ldots, n) \end{aligned} $$

と書いてある. 「二次計画法を用いて解くことができる」とあたかも簡単なように一言で書いてあるが,果たしてこれを見てすぐに実装できるのだろうか. ちなみに当時の筆者には無理でしたw これは機械学習には良くある話で,最後にさらっと「〜と解けば良い」と書いてあるが,そこが意外にハードルが高いことが多い. また数学的な部分をオブジェクト指向のコードに反映させるのも慣れが必要である(特にchainerやpytorchなどのディープラーニングフレームワークにおいて).

これに関しては,とにかく玄人の書いたコードをたくさん読むのがベストプラクティスだと思う. また,何がパッケージ化されてて何がパッケージ化されていないのかをある程度把握しておくのも大切である(例えば,上の二次計画問題であればCVXOPTなどのパッケージがあるのでそれを利用するなど).

まとめとメッセージ

以上若干愚痴の部分もあったが,筆者が思った機械学習の挫折するポイントとその原因分析である. 以下は筆者が機械学習初心者に向けたメッセージである:

  1. 機械学習は難しい・深いことを認識せよ.ネット上では「カンタン」などと謳う記事が横行しているが,甘い心構えだと「返り討ち」になる可能性が高い.やるからには腰を据えて構えるべし.
  2. 機械学習について詳しい友人を味方につけること.特に初心者は勉強していくうちにたくさんの疑問が生じるので,それを解決してくれる良い仲間を手に入れると勉強が捗る.
  3. 広く浅く.分からなければ飛ばしてよし.人に聞いても良く分からない場合だってある.そしたら思い切って飛ばせば良い.色々なことを勉強した後に読み返すと意味が分かることだってたくさんある.
  4. 細かい手法の部分よりも手法ごとの長所短所を意識せよ.初心者はすべてを「すごい」と思いがちだが,物事には全て表と裏がある.その両方を知ってる人の方が後々強い.
  5. 実際に手を動かして自分の手で実装してみること.実装することで見えてくることも多い.他の人の実装を見て・真似て・実装することで,アルゴリズムだけでなく,実装スキルも向上させよ.

niltatsu

Initial Commit 最初の一歩

ブログをはじめました.niltatsuです. 現在は情報系の大学院生をやっており,来年から就職します(金融系). 機械学習・統計・ファイナンス,そして身の回りで見たこと思ったことについて書いていこうと思います.

突然なんでブログ!?

最近研究室に籠りっぱなしの毎日を送っており,正直つまらない. もっと生産的なことをしたいな,社会に何かを発信したいなと考え,このブログを開設しました. とはいえ,何を発信しようかなーと考えたのですが,やはり今の世の中流行りの機械学習(自分の専門でもあるので)・統計,さらには来年から職場に使うファイナンスを中心に情報発信したいと思っております. ただ,そういう堅苦しそうな話だらけでも肩が凝るので,適度に息抜きとして,身の回りのことなどについても書くつもりです.

機械学習ブログとか山ほどない!?」

うん.そう.たくさんあります.昨今の機械学習ブームにより,機械学習ブロガーが山ほどいます. ただ,個人的には実は不満が多いです.理由としては

  • 「分かりやすい」と言いつつ「分かりにくい」ブログが多い
  • 自己満足に終わっているブログが多い
  • そもそも誤った情報を配信しているブログが多い

からです. もちろん,非常に良いブログもたくさんあります. ただ,初心者からすれば何が正しく何が誤っているかなど見分けがつくわけがありません(実際,筆者も初学時にたくさん誤解をしてしまった苦い経験もあります). なので,今回のブログではなるべく正しくなるべく分かりやすいブログを目指します(「なるべく正しく」と言っているのは,自分にも理解に誤りがあることがあるので...m( )m). ちなみに,今まで家庭教師や塾講師などをやってきたので,説明の分かりやすさには自信がありますw また,このブログでは同じことでもなるべく違う視点を提供することを目指し,特に初学者を対象に,つまずきやすいポイント(さらには諸々の愚痴も含めw)なども詳説していきたいと思っています.

ここまで読めば若干分かると思いますが,実はちょっと毒舌キャラですw そんな毒舌キャラによる初めてのブログですが,みなさんよろしくお願いします!

niltatsu