« 2020年7月 | トップページ | 2020年9月 »

2020年8月

2020/08/30

Redmine4.2に2要素認証機能が導入された

Redmine4.2に2要素認証機能がコミットされたのでメモ。

【参考】
akipiiさんはTwitterを使っています 「これは重要な意思決定だな。Webシステムのセキュリティ管理では今は当たり前の機能だから。RT @y503Unavailable: 祝! Redmine4.2 二要素認証導入確定 https://t.co/On80J3v8BG」 / Twitter

Feature #1237: Add support for two-factor authentication - Redmine

(引用開始)
I have emailed Jean-Philippe Lang and got his approval to commit this patch for Redmine 4.2.0.
Here are the final patches to be committed. I will commit the patches in a few days to a week.
(引用終了)

Redmineに2要素認証のパッチが提供されている: プログラマの思索

今の時代、よりセキュアなSaaSであれば、2要素認証は一般的なセキュリティ機能だ。
たとえば、ネットバンキングでは2要素認証が普通のセキュリティ機能になってきている。

Redmineを外部公開している場合、2要素認証機能があればよりセキュアな運用も可能になるだろう。
OSSでここまで配慮されているWebアプリはそう多くないのではないだろうか。

過去の開発履歴を見ると、「Redmine Security Advisories」のWikiに全て記載されている。
Web脆弱性が見つかったら、早めに対応されていることが分かる。
OSSのボランティアの開発者がここまで貢献してくれているのはすごいと思う。

Security Advisories - Redmine

今後もRedmineをウォッチしていく。


| | コメント (0)

Redmineの社内教育の記事のリンク

@saitoさんのRedmineの社内教育の記事が参考になったのでメモ。

【参考】
akipiiさんはTwitterを使っています 「後で読む。RT @Redmine_JP: [Headline] Redmineの教育をどのような観点で行うかの考察。 ①PJ 内の情報共有ステーション、②ストック情報とフロー情報、③タスク毎の小さな計画と、予実管理、④変更管理、⑤excel/ファイル共有 との比較 https://t.co/xRbfU61kEm」 / Twitter

Redmine を教えるということ|makoto0119|note

Redmineを社内に普及したい時、@g_maedaさんの資料「はじめる! Redmine (2017)」がお勧め。
図が多く読みやすい。

一方、チケット駆動の考え方ももっと説明したいときもある。
その場合、別途資料を作りたくなる。
@saitoさんの下記の目次も非常に分かりやすい。

1.PJ 内の情報共有ステーション
チケット駆動であれば、No ticket, No workから始めるべきだろう。
チケットが作業の起点になることで、情報共有できるし、進捗報告も不要になる。
何よりも、自分はこのチケットに専念して作業している、と宣言することで、責任を自覚できるし、指示の横槍の防火壁にもなりうる。
チケットは備忘録やToDoリストとも言われる。

2.ストック情報とフロー情報
チケットは、ストックとフローの二重性の性質を持つ。
チケットに記録していながら、ステータスや担当者で、誰がボールを握っているのか、も公開している。
この辺りの運用が馴染むと、チケットのやり合いがオンラインのペア作業みたいな雰囲気になる。

3.タスク毎の小さな計画と、予実管理
チケットの粒度にも関係するだろう。
チケットは1日単位、長くても2~3日単位の方が、メンバーもリーダーも管理しやすい。
Closeされないチケットが長期間残り続けると、何も仕事していないように見えてしまって、お互いにフラストレーションが溜まってしまう。
つまり、チケットの粒度は小さめにし、どんどんCloseしていく運用の方がPJが活発に動いている証拠でもあるし、進捗報告も不要になる。

4.変更管理
Redmineの標準機能では、チケット一覧がWBSになる場合が多い。
仕様変更や、作業の中止などは、チケットを変更するだけでいい。
ガントチャートにはチケットの変更が即座に反映されるので、無駄なガントチャート保守の作業が少なくなるはず。

あえて希望があるならば、Redmineにもプロダクトバックログの機能が欲しい。
おそらくその機能は、Redmineのロードマップ画面で、バージョン単位のチケットの並び順をドラッグ・アンド・ドロップで操作できる機能を追加することになるだろう。
開発者は、チケットの並び順の先頭からチケットを取るだけで、チケットの優先順位が反映されているからだ。

5.excel/ファイル共有 との比較
これは、脱Excelの話。

この資料が公開されるといいなと思う。


| | コメント (0)

2020/08/29

機械学習で反実仮想や自然実験が作れる

経済セミナーなる雑誌をたまたま手に取ったら、「機械学習で反実仮想を作れる」「機械学習は自然実験を作り出す」という記事があって、刺激を受けた。
妄想したことをラフなメモ書き。

akipiiさんはTwitterを使っています 「図書館で棚をふと手に取ったら「機械学習で反実仮想を作れる」「機械学習は自然実験を作り出す」という記事にすごく痺れた。こんな発想があるなんて面白すぎる! 経済セミナー2019年12月・2020年1月号 通巻 711号 機械学習は経済学を変えるのか? | |本 | 通販 | Amazon https://t.co/EXnNd5dm2L?」 / Twitter

【1】記事では、何らかの機械学習アルゴリズムに従って、意思決定や選択が行われた場合、そこから生成されたデータには、常に自然実験の状況が含まれているのではないか、という意見があった。

【2】たとえば、アメリカで刑事裁判の被告が犯罪しそうか否かを教師学習で予測し、その結果に基づいて有罪か無罪を意思決定するとする。
すると、ある基準値を超えると有罪に突然ジャンプする。
つまり、閾値の前後の人達のセグメントや属性はそんなに変わるはずがないのに、その閾値の前後で意味が大きく変わる。
すなわち、実質的には、回帰不連続デザイン(RDデザイン)と同じだ。

これが意味することは、WebのABテストのように、膨大なデータを均質なセグメントに分けて、刺激を与えたらどんな反応が返ってくるか、ランダムにテストする手法をわざわざ取らなくても良いことだ。
その分、手間もかからずに実験できる。
つまり、回帰不連続デザインによって自然実験がなされている、と分かる。

他の例として、Uberが需要と供給の均衡から、価格弾力性を需要に応じて変更する時に、閾値で四捨五入すると価格が大幅に変わってしまう時の回帰不連続デザインの話があった。
ここでも、閾値付近では、ドライバーも乗客も、似たような場所で似たような季節などの属性がほぼ均質であれば、閾値付近でABテストが実施された、とみなすことが出きる。

この方法が使えるならば、国勢調査や各種の一次データなど公開されているオープンデータを使って、ABテストの代わりに推定や検定が使えるようになる。
よって、経済学のモデル構築に役立てることが出きる。

【3】機械学習と計量経済学は元々観点が全く違う。

経済学では、因果関係の推測に力点を置く。
そこから、モデルを生み出し、経済学は理論を打ち立てる。
つまり、仮説検証のために統計学を使う。
経済学では、モデルを組み立てる特徴量の選択が重要であり、その特徴量がなぜ必要なのか、という理由も知りたい。

なぜならば、経済学は社会科学である限り、何らかの規範を打ち立てるべきものだから。
つまり、経済学は何らかの価値観を世の中に提供して、世の人に役立てるべきもの。

一方、機械学習や深層学習では、特徴量をデータから自動的に抽出する。
仮設を立てて選んだ特徴量ではない。
だから、機械学習で得られる特徴量は、その選択された意図が分からないので、ブラックボックスになる。
そこが気持ち悪い。

経済学のデータ解釈はモデルベース。
経済学では、政治家や官僚が選んだ経済政策が有効だったのか、仮説を検証したい。
しかし、経済学のモデル表現を固定すると、機械学習の強みである柔軟な特徴量設計と相反する。
機械学習では、特徴量の自由度が重要な特徴だからだ。

特徴量はモデルによる分析と相性は悪い。

しかし、この方面の研究も進んでいる。
機械学習が抽出した特徴量を人間の理解に繋げる方法として、特徴量を可視化する。
あるいは、複雑な特徴量をさらに簡潔なモデルで近似して変換することで、特徴量を理解しやすくする。

【4】機械学習と計量経済学は似て非なるもの。

目的が異なる。
計量経済学の目的はパラメータの推定と仮説検証だ。
一方、機械学習の目的は予測だ。
だから、機械学習では予測誤差を最小化する点に力点を置く。

方法が異なる。
計量経済学はパラメトリック法。主にデータの母集団の確率分布を仮定し、推定や検定を行う。
一方、機械学習はノンパラメトリック法。確率分布を予測せず、データの潜在パターンを発見する。

データの利用方法が異なる。
計量経済学では、全てのデータを用いて、推定や検定を行う。
その統計的性質は、母数が大きいほど確からしいことになる。
これを漸近性と呼ぶ。

一方、機械学習では、交差検証のように、本番データと検証データを分ける。
予測が目的なので、データの特徴を丸暗記してしまうと過学習になりやすい。
モデルの性能と汎用性にはトレードオフがあるので、過学習を防ぐ罰則(ドロップアウト、正則化)などの工夫がいる

【5】反実仮想とは、もし現実にこんなことが起きていたら、という実際には起きなかった並行世界をデータから復元するもの。
たとえば、政府の公共政策、企業のマーケティング戦略や意思決定など、実際に行った施策とは異なる施策を行ったら、世界はどう変わったのか、を想像する試み。

反実仮想は、英語の仮定法の発想にとても良く似ているように思える。
実際は発生していないのに、こうだったらああだったのに、みたいな言い分。

反実仮想のコンセプトは、元々は医療や農業で、新しい医薬品や新しい農法の効果を知るために、それが導入された世界と導入されなかった世界を比べてみよう、という問題意識から生まれた。
この発想が、経済学などの社会科学、ビジネスの意思決定まで普及している。

最近面白いのは、教育政策への適用だろう。
学校入試制度の改革が人々の生活や行動にどれだけ影響を及ぼすのか、政府のデータを元に、自然実験を行ってみるわけだ。
つまり、実際はABテストできないけれど、得られたデータが自然実験になっていれば、そこから有意義な結論が得られて、こうあるべきだ、という価値観を提供できるわけだ。

【6】「機械学習で反実仮想や自然実験が作れる」発想が面白いけれど、それには理由があるのだろう。

本来、経済学は100年以上の歴史を持ち、過去に沢山の理論を蓄積してきている。
しかし、統計学の手法が不足、コンピューティングパワー不足で、経済理論の検証が難しかった。
集計されたデータも国勢調査やGDPぐらいしかなかった。
だから、当時の経済学は限られたデータを元に抽象的思考を行うしかなく、必然的にきわめて低次元で、理論に依存せざるを得なかった。

しかし、コンピューティングパワーの増大やオープンデータのおかげで、モデルのパラメータをあえて増やし、人間には分からないパラメータはデータに語らせてしまってその特徴量の意味や因果関係を言えば良い、という方向に加速した。
機械学習では、高次元データを次元圧縮して意味ある特徴量を抽出できるので、そういう手法をどんどん計量経済学に適用していいけばいいわけだ。

【7】最近、行動経済学と統計学が相性が良いと知ったけれど、その理由は、経済学は理論を出発点にトップダウンで研究するのではなく、実際にある大量のデータから因果関係を抽出して、その意味を抽象化して理論を打ち立てるボトムアップの研究手法が確立されたためだろう。
今は機械学習などの技法を使えば、いくらでも大量データを処理できるので、ボトムアップの研究スタイルの方が力任せにやりやすいのだろう。

そういう意味では、プログラマであることは非常にメリットがある。
たとえ理論を今知らなくても、道具に詳しいのだから、理論を勉強する時に、道具を使って、片っ端から理論を実際にデータで語らせてみればいい。
そうすることで、理論が本当に有効なのか、とか、データと理論の相性を知ることもできるだろう。
面白い時代だ。


| | コメント (0)

2020/08/28

画像セグメンテーションのリンク

以下は画像セグメンテーションのリンク。
「物体認識」「物体検出」「セマンティックセグメンテーション」の違いを知るためにメモ。

画像生成でセグメンテーション?GANを使った教師なしセグメンテーション手法が登場! | AI-SCHOLAR.TECH

SegNet: 画像セグメンテーションニューラルネットワーク - Qiita

画像セグメンテーションのためのU-net概要紹介 技術ブログ | アクセルユニバース株式会社

【物体検出】SSD(Single Shot MultiBox Detector)の解説 技術ブログ | アクセルユニバース株式会社

(引用開始)
近年、様々な分野で画像認識技術が活用されています。これは深層学習技術の発展によって、画像認識の精度が大幅に向上したためです。画像認識技術には三段階のステップに分けられます。

1つ目は、画像に何が写っているか判断する「物体認識」です。「物体認識」では画像に何が写っているか判断するだけで、その物体の位置までは判断しません。
2つ目は、画像に写っている物体の名前と位置を判断する「物体検出」です。
3つ目は、画像のピクセル単位で物体認識を行う「セマンティックセグメンテーション」です。人間はピクセル単位で物体を認識しており、「セマンティックセグメンテーション」は私たちと同様の画像認識を機械に行わせる試みと言えます。その応用範囲は自動運転や医療など、様々な分野に渡ります。

これら3つを総称して画像認識技術と言い、「物体認識」「物体検出」「セマンティックセグメンテーション」の順に教師データを作成するのに必要なコストは高くなります。特に、ピクセル単位でラベル付けを行う必要のある「セマンティックセグメンテーション」は他の2つに比べて、教師データの作成に非常に高いコストが掛かります。
(引用終了)

CNNをベースに画像認識する時、「物体認識」「物体検出」「セマンティックセグメンテーション」の順に難易度は高くなる。
教師データがより複雑になるし、CNNも複雑に組合せたアルゴリズムになる。


| | コメント (0)

2020/08/14

「チームが機能するとはどういうことか――「学習力」と「実行力」を高める実践アプローチ」の感想

「チームが機能するとはどういうことか――「学習力」と「実行力」を高める実践アプローチ」の感想をメモ。
ラフなメモ書き。

期待して読み始めたが、自分の心に引っかかるものが正直なかったように感じた。

確かに、チームが大事だ、という主張は分かる。
昨今は、ソフトウェア開発プロジェクトのように、プロジェクトのリーダーもメンバーも、ある一定期間で集合離散を繰り返す。
アプリ、インフラ、ミドルウェアなどの専門能力を持つ開発者がプロジェクト型のチームを作り、成果を出すには、チームとしてすぐに形成できる力がいる。

この話を読みながら、10年前に流行したプロジェクトファシリテーションを思い出した。
つまり、チームビルディングのスキルがプロジェクトリーダーには必要だ。
だから、そういうイメージでこの本を読んでいた。
たぶん僕は、チームビルディングのプラクティスやアンチパターンを追い求めていたので、心に残らなかったかもしれない。

個人的には、ファシリテーションのスキルを身に付ける時に留意すべき概念は、2つあると思う。
一つは、タックマンモデル。
もう一つは、バーナードの組織の3要素。

タックマンモデルとチームビルディング ? ゲームを用いた企業研修なら| 株式会社HEART QUAKE

バーナード組織の3要素【共通目的・協働意欲・コミュニケーション】 | Act And Act

タックマンモデルが僕にとって新鮮だったのは、チーム内のコンフリクトは悪ではなく必要不可欠なものだ、という考え方だった。
たぶん、僕が日本の学校教育で、和を尊ぶ思想に染められていたからかもしれない。
むしろ、コンフリクトとして、意見や立場の対立を見える化することで、問題の本質が見えてくる、という逆説。
人間として大人のチームでは、激しい議論や意見対立はあっても、問題の真因がはっきりすれば、一致団結しやすい。

一方、バーナードの組織の3要素を診断士の先生から教わった時に強烈な印象を受けたことは、トップの人が共通目的を語り、メンバーの貢献意欲を引き出し、コミュニケーションを活性化するように汗をかくべきだ、ということだ。
僕は、組織文化というものは、ボトムアップで生まれるものだ、という思い込みがあった。
アジャイル開発が好きだから、メンバー自身がチームの文化を生み出すのが普通だろう、と。

しかし、プロジェクトリーダーの立場に自分が属するようになると、自らがビジョンを語り、メンバーの貢献意欲を引き出すように心がける言動の方が実際に多くなった。
そうした方がチームが上手く回る、と経験したこともあったが、バーナードの組織成立の三要素を知らない時はしっくりこなかった。
でも、今ではその意味は分かるような気がする。
結局、チームは人に依存するからこそ、自らエネルギーを噴出させて、周囲の人に影響させることで、チームとしての一体感や使命感を醸成させるのだ。

それは一つのスキルだろうし、後天的に身に付けられるものだと思う。

| | コメント (0)

NumPyを図解で理解する

NumPyを図解で理解する記事がわかりやすかったのでメモ。
ラフなメモ書き。

【参考】
【初心者向け】図解でわかるNumPyとデータ表現|Saya|note

線形代数とは、そもそも何なのか?
考え方は2つある。

一つは複数個の連立方程式を1個の数式で表す手段。
解は、逆行列で計算することになる。

もう一つは、座標変換を計算するための手段。
複数回、回転させた場合は、固有値を使って計算する。

行列やベクトルの計算が必要になるのは、電磁気学や量子力学のように、場(field)で複数個の微分方程式を一つの方程式でまとめて表現するために必要だから。

分かれば当たり前だが、高校生の頃は何のために行列計算するのか分かっていなかった。
そういう意味では、日本の高校の物理や数学は中途半端。
微分方程式で物理を習得しないので、小学生の鶴亀算みたいに、大量の物理の公式を覚えて解くだけになってしまう。

PythonのNumpyに初めて触れて、実際に色々触ってみて良かったのは、ループ処理せずとも一つの処理で簡単に計算できることだ。
ベクトル内で足し込む処理だけでなく、全項目が正値か判定する処理すら1行で書ける。
これにより、シグモイド関数に当てはめることが出きる、とか。

この記事の後半では、Word2Vecの簡単な解説もある。

高校数学をPythonで計算して理解する、という方法も今の時代ではありえる。
手計算も大事だが、プログラミングできれば、いくらでも応用できるメリットもある。

| | コメント (0)

« 2020年7月 | トップページ | 2020年9月 »