마법이 아니게 되는 순간
무언가를 배울 때는 항상 마법이다. 텐서플로우와는 다르게 왜 파이토치는 바로 실행이 되는가라던가. 물론 내가 관심있는 부분에 관한 얘기다. CPU, GPU의 동작도 충분히 마법이지만, 그 곳에 큰 열망이 생기지는 않는다. 살다가, 공부를 해서던, 익숙해져서던, 그 내부 동작이 이해가 갈 때가 생긴다. 다시 파이토치를 예로 들면, AutoGrad가 어떻게 동작하는지 대강 감이 온 순간이 나한테는 그랬다.
머신러닝을 처음 배울 때에도 그랬다. 어떤 Classificaion Model이 있는데, 얘는 어떻게던 돈다. 무언가를 분류한다. 아무쪼록 살다 보면, 이게 더 이상 마법이 아닌 순간이 오게 된다. 어떠한 방식의 함수를 만들어서, 이 함수가 적당히 0과 1 사이의 결과를 뱉게 만들고, 뭐 그런 함수를 잘 찾는 문제라는 사실과, 데이터와 그 함수가 잘 매칭되게 그 함수를 적당히 찾아나가는 방법들의 집합이라는 사실을 어느 순간 알게 된다.
그런데 이러한 순간은 마법을 많이 사용해 보아야 더 잘 이해할 수 있고, 더 감동을 느낄 수 있는 것 같다. (블로그에서 CLT 얘기를 참 많이 하지만) CLT를 책에서 처음 배웠을 때 가슴 벅찬 느낌이 들지 않았었다. 실제로 아마 대학원에서 무슨 프로젝트를 하면서, 몇 개인가의 개별적인 (개별적으로는 정규분포가 결코 아닌) 에러를 근사할 때 정규분포를 사용했을 때, 이 때에서야 CLT에 대해 이해할 수 있었고, 그 때 무언가 감동할 수 있었던 것 같다.
반대로 numpy를 오래 사용하다가, numpy가 실제로 어떻게 구현되었는가에 대해 한 단계 더 깊게 알게 되었다. BLAS라는 것의 존재를 알게 된 것이다. 마법이 한꺼풀 벗겨졌다. 또, 바텀-업 방식으로 한 단계 더 알게 되었다 (numerical linear algebra를 조금 공부했다). 그 전까지는 내가 할 수 없어 남의 힘을 빌려야만 했던 마법이, (numpy보다 잘 만들 수는 없겠지만), 내가 프레임워크의 도움을 빌리지 않고 직접 할 수 있는 것이 되었다. 엄청 좋았던 것이 기억난다.
이러한 마법같은 느낌과, 마법이 풀리게 된 순간의 감동이, 내 삶의 일부였으면 좋겠다.
魔法ではなくなる瞬間
何かを学ぶとき、それはいつだって魔法だ。TensorFlowとは違って、なぜPyTorchは即時実行できるのか、とか。もちろん、これは僕が興味を持っている部分についての話だ。CPUやGPUの動作も十分に魔法だけれど、そこに大きな情熱が湧くわけではない。生きているうちに、勉強したからであれ、慣れたからであれ、その内部動作が理解できるときが来る。もう一度PyTorchを例にすると、AutoGradがどう動くのかを大体つかめた瞬間が、僕にとってはそうだった。
機械学習を初めて学んだときもそうだった。あるClassificaion Modelがあって、こいつはどうにかこうにか動く。何かを分類する。とにもかくにもやっているうちに、これがもはや魔法ではなくなる瞬間がやって来る。何らかの形の関数を作り、その関数が適当に0と1の間の結果を吐き出すようにして、まあそういう関数をうまく見つける問題なのだということ、そしてデータとその関数がうまくマッチするように、その関数を適当に探していく手法の集合なのだということが、ある瞬間に分かるようになる。
ただ、こういう瞬間は、魔法をたくさん使ってみてこそ、よりよく理解でき、より感動できるような気がする。(ブログでCLTの話を本当によくしているけれど)CLTを本で初めて学んだときは、胸がいっぱいになるような感覚はなかった。実際、おそらく大学院で何かのプロジェクトをしながら、いくつかの個別の(個別には決して正規分布ではない)エラーを近似するのに正規分布を使ったとき、ようやくこのときになってCLTについて理解でき、そのとき何かに感動できたように思う。
反対に、numpyを長く使っているうちに、numpyが実際にどう実装されているのかを、もう一段深く知るようになった。BLASというものの存在を知ったのだ。魔法の皮が一枚剥がれた。また、ボトムアップ方式でもう一段深く知ることになった(numerical linear algebraを少し勉強した)。 それまでは、自分にはできず他人の力を借りるしかなかった魔法が、(numpyよりうまく作ることはできないだろうけれど)、フレームワークの助けを借りずに自分で直接できるものになった。ものすごく嬉しかったのを覚えている。
こういう魔法のような感覚と、魔法が解けた瞬間の感動が、僕の人生の一部であってほしい。
不再是魔法的瞬间
学习某样东西时,它一开始总是魔法。比如,和TensorFlow不同,为什么PyTorch可以即时执行。当然,我说的是自己感兴趣的部分。CPU、GPU的运作也完全称得上魔法,但我对那里并不会产生强烈的渴望。活着活着,不管是因为学习了,还是因为习惯了,总会有理解其内部运作的时候。再以PyTorch为例,对我来说,大致明白AutoGrad如何运作的那个瞬间就是如此。
刚开始学习机器学习时也是这样。有一个Classificaion Model,这家伙反正就是会跑。它会对某些东西进行分类。总之,做着做着,就会迎来它不再是魔法的瞬间。到了某一刻,我会明白:这其实是构造某种形式的函数,让这个函数适当地吐出0和1之间的结果,再把这样的函数找好的问题;也是一整套为了让数据与那个函数良好匹配,而逐步适当地寻找那个函数的方法。
不过我觉得,这样的瞬间,只有在大量使用过魔法之后,才能理解得更好,也才能感受到更大的感动。(虽然我在博客里真的讲过很多次CLT)第一次从书上学到CLT时,我并没有心潮澎湃。实际上,大概是在研究生院做某个项目时,用正态分布去近似若干个各自独立的(单独来看绝对不是正态分布的)误差,直到那时我才理解了CLT,也好像是在那时感受到了某种感动。
反过来,长期使用numpy之后,我对numpy实际上是如何实现的有了更深一层的了解。我知道了BLAS这种东西的存在。魔法被揭开了一层。然后,我也用自底向上的方式又多了解了一层(稍微学习了一点numerical linear algebra)。 在那之前,那些我自己做不到、只能借助别人力量的魔法,(虽说我肯定无法做得比numpy更好),变成了不借助框架也能由我亲手完成的东西。我记得当时感觉特别好。
我希望这种如魔法一般的感觉,以及魔法被解开那一刻的感动,能成为我人生的一部分。
The Moment It Stops Being Magic
Whenever I learn something, it is always magic at first. Like why PyTorch executes immediately, unlike TensorFlow. Of course, I am talking about the parts that interest me. The workings of CPUs and GPUs are certainly magical enough, but I do not feel any great yearning toward them. As I go through life, whether because I study something or simply grow familiar with it, there comes a time when I understand how it works internally. To use PyTorch again as an example, for me, it was the moment when I got a rough sense of how AutoGrad works.
It was the same when I first learned machine learning. There is some Classificaion Model, and somehow this thing runs. It classifies something. Anyway, if you keep at it long enough, a moment comes when it is no longer magic. At some point, you realize that it is a problem of creating some kind of function, making that function spit out a suitable result between 0 and 1, and, well, finding a good function like that; and that it is a collection of methods for suitably searching out that function so the data and the function match well.
But it seems to me that you can understand these moments better, and be more deeply moved by them, only after using the magic a lot. (I talk about CLT an awful lot on this blog, but) when I first learned CLT from a book, I did not feel overwhelmed with emotion. It was probably while doing some project in graduate school, when I used a normal distribution to approximate several individual errors (none of which, individually, followed a normal distribution at all), that I finally came to understand CLT, and I think that was when I could feel moved by it in some way.
Conversely, after using numpy for a long time, I came to understand one level deeper how numpy is actually implemented. I learned of the existence of something called BLAS. One layer of the magic was peeled away. I also learned one level deeper in a bottom-up way (I studied a little numerical linear algebra). The magic that, until then, I had been unable to perform myself and could only accomplish by borrowing other people’s power became something I could do directly without the help of a framework (though I probably could not make it better than numpy). I remember how incredibly good that felt.
I hope this magical feeling, and the sense of wonder at the moment when the magic is dispelled, can be part of my life.