Anaconda経由でTensorFlow (GPU)+Keras環境を構築する
タイトルの通りです。
これまでだと、GPU版TensorFlowのためにCUDA環境を構築するのがとにかく面倒でした。
良い方法はないかとググっていたら、Anaconda経由ですべてが完結するメチャクチャ簡単な方法を見つけたので紹介します。
以下の記事です。
Windows10とUbuntuの両方とも同じやり方で行けるらしい(本記事での環境はWindows10)。
大事なところだけ抜き出すと、プロンプト画面で
conda create --name tf_gpu tensorflow-gpu
と入力して仮想環境を構築するだけとのこと。
tf_gpuの部分は仮想環境に付ける名前なので、自分の好きにしたら良いです。
これで後は勝手に仮想環境が構築され、numpyやTensorFlow, Kerasも勝手に入ります。
matplotlibやjupyterなどは入っていないので
activate tf_gpu
で仮想環境をアクティベートして、必要なパッケージを適宜インストールしましょう。
from tensorflow.python.client import device_lib device_lib.list_local_devices()
を実行して、
device_type: "GPU"
が出力の中にあればインストール成功です。
関数の最適化について勉強メモ
ざっくりと最適化についてまとめる(少し詳しい目次程度)。
手法間のつながりとか流れを確認する用なので、内容には踏み込まない。
証明や細かい解説は書籍を参照すること*1。
間違いがあればご指摘ください。
勾配法
ニュートン法
最適化したい関数を2次の項までテイラー展開する(二次近似)。 近似した関数の勾配(1階微分)が最大になる方向へ突き進む方法。 2次の項まで反映されるので、最急降下法より収束が早く、二次収束することが知られている。 二階微分(ヘッセ行列)の逆行列を計算しなければならないのが難点。 (数値計算において逆行列は桁落ちが激しいので避けたいということ)共役勾配法
最適化したい関数を2次の項までテイラー展開する(二次近似)。 近似した関数の勾配(1階微分)=0の式を作ると、二次の項でヘッセ行列xベクトルの形が出てくる。このベクトルが共役勾配である。 共役勾配は最適化したい関数の1階微分から得られる勾配とは、少しずれたベクトルになる。 ずれ分のベクトルを導入し、 共役勾配=勾配+αずれベクトル と線形和で表現し、αを求めることでヘッセ行列の逆行列を計算することを回避した。
最小二乗法
あまりに一般的すぎるので省略
非線形最小二乗法
最小二乗法は連立一次方程式の解を求める方法だった。 非線形の連立方程式に拡張したもの。
ガウス・ニュートン法
複雑な関数の2階微分を計算するのは困難なので、ヘッセ行列を近似してからニュートン法を用いる方法。 解の近傍で与式=0と置ける場合、それを利用して二階偏微分の項を近似的に0とみなすことでヘッセ行列を2階微分を計算せずに近似できる。 解の近傍でしか使えないのが難点。レーベンバーグ・マーカート法
ガウス・ニュートン法は解の近傍でしか使えない。そこで、まず勾配法などで雑に探索を行い解の近傍に到達したらガウス・ニュートン法に切り替えるのがこの方法。
統計的最適化
-
出力誤差モデル
誤差が正規分布に従うとすれば、最小二乗法と一致する。入力誤差モデル
入力にも誤差がのっているとするモデル。 データ点から推定する直線までの距離を最小化する。
データ分類(クラスタリング)
線形計画法
1次不等式による制約付きで、1次式を最大化/最小化する。
スラック変数
制約不等式を等式にするために導入する非負の変数。シンプレックス法
線形計画問題を組織的に解く(可能領域の頂点を全探索せずに済む)。 実装にはシンプレックス表(タブロー)を用いた実装が便利? 常に関数が増大するように探索するので、初期の解が非負ならその後の解も非負である。退化(縮退)
n次元空間内の可能領域を表す多面体の頂点が、n+1枚以上の平面が交わっている点になっていると起こる。2次元平面で考えれば可能領域を表す直線3つ以上が1つの点を共有してる状態で、2直線の交点として考えたときに解釈が複数存在することになる。解釈を変えても関数の値が変化しない。この状態を退化(縮退)という。この時、シンプレックス法のアルゴリズム的には退化の分無駄なステップを刻むことになる。退化から脱出する方法としては、辞書式順序による方法、および記号摂動法などがあるとのこと。人工変数を導入
出発時の解が見つからない(見つかりにくい)場合に人工変数を導入する。
最適解が求まった時に人工変数が0になっていればなかったことと同じなので問題ないという考え。
可能領域が空集合になっていると、人工変数が0にならない(そのようなケースの判定に使える)双対原理
書くと長いので省略。「裏返しの関係」ともいわれる?難しい話ではないので調べてみると良い(ただ、ややこしくはある)。 線形計画では、双対問題を解くと、元の問題の最適解が求まる。
ただ、線形計画問題は簡単に解けるのであまりメリットを感じない(個人の感想)。
非線形計画法
制約条件も目的関数も一般の非線形関数になったもの。
凸計画
目的関数が上に凸、かつ可能領域も凸な問題。
線形計画法も凸計画問題の一つ。2次計画
制約条件がすべて線形
目的関数が上に凸な問題
(cvxoptというPythonパッケージがあって簡単に使える。)
ラグランジュ乗数
目的関数は上に凸、制約不等式はすべて下に凸、制約等式がすべて1次式。
この時、制約不等式、制約等式にラグランジュ乗数をかけて目的関数と合わせてラグランジュ関数をつくる。
ラグランジュの未定乗数法を理解しておくとわかりやすい。
ここから、KKT(カルーシュ・キューン・タッカー)条件がでてくる。
双対原理
線形計画の時の拡張になっている。
線形計画問題では双対問題を解くことで主問題の最適解が求まった。
一方で2次計画では、双対問題を解くことで主問題の最適解が求まるわけではない。
しかしながら主問題より簡単に解け、主問題の解を限定できる点で強力。
また、主問題と双対問題を突き合わせることで最適解かどうかの判定に使える(サポートベクターマシーンなどに利用されているらしい)。
動的計画法
変数が離散値をとる関数の最適解を効率的に求める方法。
大きな問題を小さな問題に分割して再帰的に解いていく。
最適経路問題として考えた方がわかりやすいかもしれない(個人の感想)。
最適性原理が成り立つ(どの部分解もその部分問題の最適解になっている)。
半順序しか与えられていない問題にも使えるらしい(半順序ってなに?って人は集合・位相論のテキストを読むとよい)。
ストリングマッチング
文字列のマッチングを行う問題。
評価関数を導入して最適化問題に帰着させる。
情報理論を勉強しておくと呑み込みが早いと思う。制約のある多段階決定問題
制約付きでもうまく変数変換すれば、見かけ上制約のない動的計画法に帰着できるパターンについて紹介してくれている。
参考書籍
2次形式の最大値と最小値
この記事中にある正方行列の対角化を式変形すると、行列のスペクトル分解(固有値分解)が得られ、これを使って2次形式の標準形が得られる。
正方行列のスペクトル分解(固有値分解)
正方行列の対角化は以下のような式だった。
$$ \begin{align} \boldsymbol{P^{-1}AP} &= \boldsymbol{D} \\ &= \left(\begin{array}{cccc} \lambda_1 & 0 & \ldots & 0 \\ 0 & \lambda_2 & \ldots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \ldots & \lambda_n \end{array}\right) \end{align} $$
は固有ベクトル、は対応する固有値を対角成分に並べたものである。
これを式変形して、のスペクトル分解を得る。
$$ \begin{align} \boldsymbol{A} &= \boldsymbol{P D P^{-1}} \end{align} $$
2次形式の標準形
正方行列のスペクトル分解を使うと、2次形式の標準形が得られる(2次形式と2次関数は別物なので注意)*。
まず、2次形式
$$ \begin{align} \boldsymbol{x^{T} A x} \end{align} $$
を考える。次に、ベクトルを固有ベクトルを基底とする空間に投げる。
$$ \begin{align} \boldsymbol{t} &= \boldsymbol{P x} \\ \boldsymbol{x} &= \boldsymbol{P^{T} t} \end{align} $$
これを2次形式の式に代入すれば
$$ \begin{align} \boldsymbol{x^{T} A x} &= \boldsymbol{\left(P^{T} t \right)^{T} A P^{T} t} \\ &= \boldsymbol{t^{T} P A P^{T} t} \\ &= \boldsymbol{t^{T} D t} \end{align} $$
となる。ただし
$$ \begin{align} \boldsymbol{P^{-1}} &= \boldsymbol{P^{T}} \\ \boldsymbol{P^{-1}AP} &=\boldsymbol{PAP^{-1}} = \boldsymbol{D} \end{align} $$
を利用した。これを2次形式の標準形と呼ぶ。ただ、固有値と固有ベクトルを使って2次形式を書き直しただけである。
二次形式の最大値、最小値
が半正定値対称行列なら、2次形式の最大値、最小値はそれぞれの最大固有値、最小固有値に対応する。標準形を得ると、このように話がシンプルになる。
少々雑だったが、ここまでがよくある書籍の解説である。これですっきり理解できるならそれでよいが、なんで最大固有値、最小固有値が最大値、最小値に対応するのかイメージできないかもしれない。
2次形式の標準形の幾何学的解釈
これなら分かる最適化数学(金谷健一)、例題1.25、1.27よりの時
$$ \begin{align} f=6x^{2}+4xy+3y^{2} \end{align} $$
の最大値、最小値を考える。これを標準形に直すと
$$ \begin{align} f=2x' ^2 + 7y' ^2 \end{align} $$ となる。、は固有ベクトル空間で変換後の、で
$$ \begin{align} \boldsymbol{t} &= \boldsymbol{P x} \\ \boldsymbol{x} &= \left(\begin{array}{c} x \\ y \end{array}\right), \boldsymbol{t} = \left(\begin{array}{c} x' \\ y' \end{array}\right) \\ \end{align} $$
である。係数2と7は固有値になっている。
また、とは同値である。
改めて標準形の式を眺めてみると、幾何学的には放物面に対応していることがわかる。実際にプロットしてみると
となり、等高線が楕円になっていることがわかる。に制限すれば、のとき最小値2(最小固有値)、のとき最大値7(最大固有値)になることがわかる。
*2次関数は2次以下の項からなる関数。2次形式は2次の項のみからなる関数。
参考書籍
- 金谷健一(2005)「これなら分かる最適化数学」共立出版株式会社
固有値と固有ベクトル
固有値と固有ベクトルについてメモ。
何をしているかはわかっているけど、何が起きているかがわかっていなかった。
- 「固有」ってなんだよと思っている
- 行列の掛け算で何が起きてるのかイメージがわかない
そんな人たちは参考になるかも。
数弱なので間違いがあれば教えてくれると助かります。
固有値と固有ベクトルについておさらい
行列 に対して $$ \begin{equation} \boldsymbol{A u} = \lambda \boldsymbol{u} \end{equation} $$
が成り立つでないベクトルを行列の固有ベクトル、をその固有値という。
が対称行列なら、は個の固有値を持つ。また、の各成分間は互いに直交する。
ここで、初めの式をちょっと変形する $$ \begin{equation} \left(\lambda \boldsymbol{I} - \boldsymbol{A} \right) \boldsymbol{u} = \boldsymbol{0} \end{equation} $$ 定義よりより $$ \begin{equation} | \lambda \boldsymbol{I} - \boldsymbol{A}| = \boldsymbol{0} \end{equation} $$
この式を固有方程式(特性方程式)と呼ぶ。
つまりなんなのか
行列を左からかけることを、行列を作用させるなんて物理では言うらしい。
つまり、ベクトルを伸ばしたり、縮めたり、回転したりして別のベクトルへ変換することを意味している。
ここで改めて式を眺めてみる。
$$
\begin{equation}
\boldsymbol{A u} = \lambda \boldsymbol{u}
\end{equation}
$$
この式が意味するところは、「行列によるの変換は、結局を倍することと同じ」ということ。
別の言い方をすれば、「行列による変換をしても、長さが倍変化するだけで向きが変わらないベクトルがある」ということで、そんなベクトルを固有ベクトルと呼んでいる。
基底変換
今、デカルト座標系にベクトル
$$
\begin{align}
\boldsymbol{v} = \left(
\begin{array}{c}
x \\
y
\end{array}
\right)
\end{align}
$$
が存在して、座標変換によって新たな表現を得ることを考える。
これはデカルト座標での表現なので、基底ベクトル, を使って大げさに書けば
$$
\begin{align}
\boldsymbol{v}
&= x\boldsymbol{e}_x + y\boldsymbol{e}_y \\
&= x\left(
\begin{array}{c}
1 \\
0
\end{array}
\right)
+y\left(
\begin{array}{c}
0 \\
1
\end{array}
\right) \\
&= \left(\begin{array}{cc}
1 & 0 \\
0 & 1
\end{array}\right)
\left(\begin{array}{c}
x \\
y
\end{array}\right)
\end{align}
$$
となる。
この基底ベクトルを
$$
\begin{align}
\left(\begin{array}{cc}
1 & 0 \\
0 & 1
\end{array}\right)\left(\begin{array}{c}
x \\
y
\end{array}\right)=\left(\begin{array}{cc}
p_x & q_x \\
p_y & q_y
\end{array}\right)\left(\begin{array}{c}
x' \\
y'
\end{array}\right)
\end{align}
$$
となるような別の基底ベクトル
$$
\begin{align}
\boldsymbol{p}=\left(\begin{array}{c}
p_x \\
p_y
\end{array}\right), \;\;
\end{align}
\boldsymbol{q}=\left(\begin{array}{c}
q_x \\
q_y
\end{array}\right)
$$
で置き換えて、xy座標(デカルト座標)以外の任意のpq座標で表現できることがわかる。
ここでまた、最初の式をまた眺めてみる。
$$
\begin{equation}
\boldsymbol{A u} = \lambda \boldsymbol{u}
\end{equation}
$$
この式の正方行列は、ベクトルの変換意味しているのだった(ベクトル空間の線形写像)。
説明のために、
$$
\begin{equation}
\boldsymbol{A} = \left(\begin{array}{cc}
a_{11} & a_{12} \\
a_{21} & a_{22}
\end{array}\right), \;\;
\boldsymbol{u} = \left(\begin{array}{c}
u_1 \\
u_2
\end{array}\right)
\end{equation}
$$
とすると、
$$
\begin{align}
\boldsymbol{A u}=\left(\begin{array}{cc}
a_{11}\\
a_{21}
\end{array}\right)u_1 +\left(\begin{array}{cc}
a_{21} \\
a_{22}
\end{array}\right)u_2
\end{align}
$$
と書けることから、行列の列成分は変換後の空間での基底ベクトルを表していたことがわかる。
つまり、という数字をそのまま行列による変換後の空間に渡すとどうなるか計算していただけのことだった。
正方行列の対角化
さて、行列による変換前後で固有ベクトルはスケールが固有値倍変わるだけで向きが変わらないのであった。
ということは、
という手順で行列による変換は簡単な式に置き換えられそうだ。
正方行列によってn次元ベクトルが別のn次元ベクトルに変換される、 $$ \boldsymbol{t} = \boldsymbol{A s} $$ という変換を考える。ここに、行列の右側に固有ベクトルを並べた行列 $$ \begin{align} P&=\left(\boldsymbol{p}_1, \ldots, \boldsymbol{p}_n\right) \\ \boldsymbol{p}_1 &= \left(\begin{array}{c} p_{11} \\ \vdots \\ p_{1n} \end{array}\right), \;\; \boldsymbol{p}_2 = \left(\begin{array}{c} p_{21} \\ \vdots \\ p_{2n} \end{array}\right), \;\; \cdots, \;\; \boldsymbol{p}_n = \left(\begin{array}{c} p_{n1} \\ \vdots \\ p_{nn} \end{array}\right) \end{align} $$ をねじ込んでみると $$ \boldsymbol{t} = \boldsymbol{(AP)(P^{-1}s)} $$ となる。の部分は、一番最初に登場した式 $$ \begin{equation} \boldsymbol{A u} = \lambda \boldsymbol{u} \end{equation} $$ の左辺に対応している。異なるのは、固有ベクトルをひとつずつ扱っているのではなく、行列として並べてしまったことくらいである。じゃあ右辺はどうなってるのと思うかもしれないが、固有値と対応する固有ベクトルの積が以下のように並んでいるだけだ。 $$ \begin{equation} \boldsymbol{A P} = A \left(\boldsymbol{p}_1, \ldots, \boldsymbol{p}_n\right) = \left(\lambda_1 \boldsymbol{p}_1, \ldots, \lambda_n\boldsymbol{p}_n\right) \end{equation} $$
話を戻す。
$$
\boldsymbol{t} = \boldsymbol{(AP)(P^{-1}s)}
$$
の式をよく見てみると、とする変換だったのに、のように見えてしまう。を使いたいために格好が悪くなってしまった。
いっそのこと、と考えてしまえばよさそうだ。つまり、 と をそれぞれ が基底になっている空間に投げてしまってから考えるということだ。もし、元の座標系での値が知りたかったらを掛ければ元通りなので問題はない。 式で書くと
$$ \begin{equation} \boldsymbol{P^{-1} t} = \boldsymbol{(P^{-1}AP)(P^{-1}s)} \end{equation} $$
となる(有名な式らしい...知らんけど)。
なんだか大事になっているように見えるが、実はそうではない。の部分が実は、固有値を対角成分に並べた対角行列になるからだ(を対角行列にする操作を対角化と呼ぶ)。
$$ \begin{align} \boldsymbol{(P^{-1}AP)} &= \boldsymbol{D} \\ &= \left(\begin{array}{cccc} \lambda_1 & 0 & \ldots & 0 \\ 0 & \lambda_2 & \ldots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \ldots & \lambda_n \end{array}\right) \end{align} $$
つまり、行列によるベクトルの変換は、が基底となる空間へ投げてしまえば、そこでは基底ベクトルの方向へ固有値倍しただけだとみなせるということである。
「固有ベクトルを基底とした空間へ投げるんじゃないの?」
と思われるかもしれないがこれは書き方の問題で、結局
$$ \begin{align} \boldsymbol{P^{-1}AP} =\boldsymbol{PAP^{-1}} = \boldsymbol{D} \\ \end{align} $$
なので、
$$ \begin{equation} \boldsymbol{P^{-1} t} = \boldsymbol{(P^{-1}AP)(P^{-1}s)} \end{equation} $$
でも
$$ \begin{equation} \boldsymbol{Pt} = \boldsymbol{(PAP^{-1})(Ps)} \end{equation} $$
でも同じことである。「固有ベクトルを基底とした空間に投げてから考える」という意味では後者の方がスッキリしているのかもしれない。
【数理統計】Fisher情報量とクラメール・ラオ下限(CR下限)
Fisher情報量って何なのか理解したかっただけ。
Fisher情報量がわかれば、クラメール・ラオ下限(不偏推定量の分散の下限)がわかる。
備忘録として簡単にまとめておく。
前提として、不偏推定量についてだけ考えるものとする。
不偏推定量に関してはこちら
推定量が不偏性を持てば、その推定量の最適性・適切性の判定が容易になる。 互いに独立な標本の同時密度関数がで与えられるとする。すなわち $$ \begin{align} X_i \in \boldsymbol{X} &, \quad i \in \left\{1, \ldots, n \right\} \\ f(\boldsymbol{x}|\theta) := \prod_{i=1}^n p(x_i; \theta) &,\quad \boldsymbol{x} = \left\{x_1, \ldots, x_n \right\} \end{align} $$
このとき、 $$ \begin{align} \forall \theta \in \Theta,\qquad \boldsymbol{E} \left(\hat \theta_n \right) \end{align} $$
を満足する。これをについて微分 $$ \begin{equation} \frac{\partial}{\partial \theta} \boldsymbol{E} \left(\hat \theta_n \right) = 1 \end{equation} $$
これを展開 $$ \begin{equation} \frac{\partial}{\partial \theta} \int f(\boldsymbol{x}|\theta) ~ \hat \theta_n ~ \mathrm{d}\boldsymbol{x} = \int \hat \theta_n \frac{\partial}{\partial \theta} f(\boldsymbol{x}|\theta) \mathrm{d}\boldsymbol{x} \label{eq:fisher1} \end{equation} $$
ここで、 $$ \begin{align} \frac{\partial}{\partial \theta} \log{L} &= \frac{1}{L} \frac{\partial L }{\partial \theta} \\ \frac{\partial L}{\partial \theta} &= L \frac{\partial}{\partial \theta} \log{L} \end{align} $$
より
$$ \begin{align} \mathrm{R.H.S} &= \int \hat \theta_n \frac{\partial \log{f(\boldsymbol{x}|\theta)}}{\partial \theta} f(\boldsymbol{x}|\theta) \mathrm{d} x \\ &= \boldsymbol{E} \left[\hat \theta_n \frac{\partial \log{f(\boldsymbol{x}|\theta)}}{\partial \theta} \right] \\ &= Covariance \left(\hat \theta_n, \frac{\partial \log{f(\boldsymbol{x} | \theta)} }{\partial \theta} \right) \\ &\leq \sqrt{V \left(\hat \theta_n\right)} \sqrt{I_n\left(\theta \right)} \label{eq:fisherinfo} \end{align} $$
ここで、はFisher情報量と呼ばれる量で、クラメール・ラオの下限(CR下限)と密接な関係がある(後述)。なお、
$$ \begin{align} Covariance \left(\hat \theta_n, \frac{\partial \log{f(\boldsymbol{x} | \theta)} }{\partial \theta} \right) \leq \sqrt{V \left(\hat \theta_n\right)} \sqrt{I_n\left(\theta \right)} \end{align} $$ ではコーシー・シュワルツ不等式を利用した。また、
$$ \begin{align} I_n\left(\theta \right) &= V \left(\frac{\partial \log{f(\boldsymbol{x}|\theta)}}{\partial \theta} \right) \\ &= \boldsymbol{E} \left[\left( \frac{\partial \log{f(\boldsymbol{x}|\theta)}}{\partial \theta}\right) ^2 \right] \end{align} $$
特に個の標本がなら $$ \begin{align} I_n \left( \theta \right) &= \boldsymbol{E} \left[ \left( \frac{\partial}{\partial \theta} \sum_{i=1}^{n} \log{f(\boldsymbol{x}|\theta)} \right) ^2 \right] \\ &= n \boldsymbol{E} \left[\left(\frac{\partial}{\partial \theta} \log{f(\boldsymbol{x_1}|\theta)} \right) ^2 \right] \\ &= nI_1 \left( \theta \right) \end{align} $$
ここで $$ \begin{equation} \frac{\partial}{\partial \theta} \boldsymbol{E} \left(\hat \theta_n \right) = 1 \end{equation} $$
を思い出せば $$ \begin{align} Covariance \left(\hat \theta \left(\boldsymbol{x} \right), \frac{\partial \log{f(\boldsymbol{x}|\theta)}}{\partial \theta} \right) &= 1 \\ Covariance \left(\hat \theta \left(\boldsymbol{x} \right), \frac{\partial \log{f(\boldsymbol{x}|\theta)}}{\partial \theta} \right) &\leq \sqrt{V \left(\hat \theta_n \right)} \sqrt{I_n \left(\theta \right)} \end{align} $$
より $$ \begin{align} 1 &\leq \sqrt{I_n \left(\theta \right)} \\ V \left(\hat \theta \right) &\geq \frac{1}{nI_1 \left(\theta \right)} \label{eq:CR} \end{align} $$
となる。以上より、フィッシャー情報量によって推定量の分散の下限が決まることがわかる(推定量としての良さがわかる)。この下限をクラメール・ラオ下限(CR下限)と呼ぶ。
Julia1.0でマクロを@docしまくった
タイトルの通りである。
「Juliaのマクロ、全然わからん」
と思ったので、とりあえず@の後にtabを打って出てくるマクロすべてについて@docしてみた。
【Julia】Julia-1.0.0のProjectを試す【仮想環境?】
Julia1.0.0が遂にリリースされました。
仮想環境っぽいものを作って環境の切り替えができるようなので、試してみます。
Projectの作成
Anaconda Pythonではconda createコマンドで仮想環境を作れました。
Julia1.0.0ではProjectと呼ぶようです。
Anacondaでは
conda create -n envname
とする必要がありましたが、Juliaではプロジェクトのディレクトリに入って
activate .
とするようです。
その後、
julia>]
(projectname)pkg> add hogehoge
で、プロジェクトローカルな環境にhogehogeパッケージが入ります。
その後バックスペースでpkg環境を抜けて同フォルダで作業すれば良いっぽい。
ただ、Julia1.0.0がリリースされたのが記事作成時点で昨日の今日なので、対応が追い付いているパッケージを探すのが結構大変です(2018/08/10現在)。
私は情弱なのでおとなしく修正を待つことにします。
(ちなみに現状遊ぶなら0.6が無難)
文献検索、管理、メモを1つの画面で完結させる
文献管理ソフトの紹介です。
以前にPaperpileが凄いって紹介をしました。 hotoke-x.hatenablog.com
個人的には好きなんですが、wordとの相性が悪い...
もっと良いのはないかと思ってたらReadcubeがありました。
数か月使ったので良い部分を簡単に紹介していきます。
※例示しているのはオープンアクセスな論文です。
Readcubeの凄いところ
- 複数の検索エンジンで同時検索
- 検索結果が自動保存される(そして簡単に消せる)
- 毎年の引用数がわかる
- 引用されている文献へ容易に飛べる
- どんな風に引用されているのか見れる
- Recommendationsが強力
こんな感じで全体的に便利すぎ。
全部1つの画面で完結します。
関連論文が次から次へ見つかって大変(嬉しい)。
使い方
ユーザー登録は済んでいるものとします。
また、ウェブ版での説明です(デスクトップ版もあります)。
基本画面(青い四角は身バレ防止です。)
画面にNatureやらScienceやらGoogle Scholarやらが表示されてますが、こっから同時検索してくれます。 なんかもうこれだけで凄い...。
検索してみた結果。 アブストが表示される。 オープンアクセスだったり、学校などジャーナルを購読している機関からアクセスするとFigureまで表示してくれます。
検索結果の図をクリックすると拡大表示。この段階ではまだ文献をダウンロードしたりしていません。 あくまでも検索結果です。
「Add to Library」をクリックするとインポートしてくれます。
(supplementがあればそれも同時にインポートする。すごい...)
そして、画面左側には検索結果が自動保存されます。便利! 青い部分には自分でタグ付けした文献が入っています。 一つの文献に複数のタグをもたせることもできます。
ここからが特にお気に入りの機能。
ライブラリで文献をクリックすると、情報が表示されます。 アブストがここでざっと確認出来ます。
で、上のグラフのマークをクリックすると引用情報が見れます。
毎年どれくらい引用されているのか、どの論文に引用されているのかを見ることができます。
どんなふうに引用されているかも見ることができる。凄すぎて拍手。
その他
デスクトップ版ではwordへのcitation追加機能も付いてきます。
もちろん文献を読みながらハイライトしたり、ノートをとることも可能です。
デスクトップアプリが重いことが唯一残念。
Recommendationsをクリックすると、ライブラリの文献を元にお勧め論文を検索して表示してくれます。
しかもタグごとのお勧めも表示可能。
関連論文がめっちゃ見つかります。