본문 바로가기

카테고리 없음

240819 - 240825 금주의 놀라운 사실들

240819

1) SELECT * FROM T GROUP BY (C1);이라는 SQL이 있다고 하자. 이때 T의 column이 C1 하나라면 거의 모든 RDBMS에서 비슷하게 동작한다. 그러나 만약 column이 여럿인 경우에는 RDBMS마다 구현이 다르다. MySQL이나 SQLite 등은 해당 쿼리가 DISTINCT와 똑같이 작동하고, Oracle DB에서는 아예 작동하지 않는다. 나는 이제까지 MySQL 쪽이 정석적인 구현이라고 생각하고 있었다. 그렇게 배우기도 했고. 하지만 ISO 표준에 따르면 Oracle 쪽이 더 정석적인 것 같다. 자세한 건 더 찾아봐야겠지만.

 

 

240820

별 일 없었다.

 

 

240821

어떤 대상은 완벽히 파악하는 것이 불가능하다. 그 복잡성 때문이든, 우리가 가진 비용 때문이든. 우리는 그러한 불확정성을 확정하기 위해 통계라는 창을 거쳐서 대상을 바라보게 된다. 다른 방식으로 represent하고, 특정한 형태로 decompose하거나 project하고, 데이터가 아닌 메타데이터를 바라보기도 하며, 결국에는 추정한다.

무언가를 결정적으로 예측하는 데 있어서 필요한 최소한의 변수 집합이 존재하고, 그것보다 더 "뿌연" 형태로 sub-optimal한 방식을 구축할 수 있다. …이것이 최선인가? 어쩌면. 포커에서는, 불완전 정보 게임에서는 영원히 이기는 방법 따윈 없다. 우리는 패배해야만 하고, 대신 적게 잃어야만 한다.

즉 trade-off를 수용해야만 한다. 다만 덜 잃고 더 얻는 구간에 대해서 잘 알아야만 한다. 완전한 이론으로부터 환원해나가기도 하고, 통계적인 도구를 사용하기도 하며, 직관에 의존해서 테스트를 하는 순간도 가끔은 필요할 것이다.

 

 

240822

좋은 코드에 대해 알아야만 하는 순간이 왔다. 좋은 코드란 "환경"에 걸맞는 스타일을 갖는 코드라고 본다. 거의 대부분의 사람이 합의할 만한 지점으로부터 시작해서, 무엇을 포기하고 무엇을 선택할 것인가에 대해서는 수많은 견해가 존재한다. 예전에 이 블로그에서 말했는지 기억이 애매한데, 세상에 공짜 점심은 없을지 몰라도 우리가 지금 지나치게 비싼 점심을 먹고 있을 가능성은 존재한다. 좋은 코드는 그와 같다고 생각한다. 견해가 갈리기 전의, 누구나 공감할 만한 지점부터 갖춰나가야 할 것이다. 내 코드에는 그런 부분이 없었는데, 나는 그걸 가리켜 "제가 프로그래밍을 못하나 봅니다"라고 표현했다. 너무 슬퍼!

 

 

240823

1) 메모리 정렬(memory alignment)이라는 개념에 대해서 들었다. 여기서 말하는 정렬이란 메모리 위에서 특정 바이트 경계에 맞추어 데이터를 저장하는 것을 말한다. 프로세서는 정해진 위치로부터 정해진 배수의 메모리 단위를 읽어들이므로, 정렬되지 않은 메모리를 읽어들일 때에 오버헤드가 존재한다. 메모리를 정렬시키면 그러한 오버헤드가 줄어든다. 구조체에 패딩(padding)을 일부러 주어 공간복잡도를 희생하는 대신 시간복잡도 상에서 이점을 얻는 것이다. 임베디드에서 자주 활용되는 모양이다. 저수준에 가까울수록 기상천외한 것들이 많은 것 같다. 이게 다 물밑에서 계속 있어왔던 거겠지만, 놀라움은 가시지 않는다. 역시 CS를 공부해야…

 

2) 친구에게서 SVD(singular value decomposition)라는 개념을 아냐는 질문을 받았다. 당연히 몰라서 검색해봤다. 대충 말하면 정사각행렬이 아닌 행렬의 대각화고, 조금 덜 대충 말하면 m*n 행렬은 m*m 회전 행렬, m*n 스케일링-프로젝션 행렬, n*n 회전 행렬의 유일한 곱으로 표현될 수 있다는 것이다. 딱 봐도 AI에서 더럽게 많이 쓸 법한 개념이었다. 물론 말은 이렇게 해도 내가 직접 손으로 계산을 해본 건 아니라서 그다지 의미 없는 학습이지만, 이런 게 있다는 것만으로 즐거워지는 순간이 있다. 세상은 넓고 기이한 방법은 많다. 내가 써볼 일이 당장은 없겠지만, 공부할 기회를 조만간 만들어보고 싶다.

 

 

240824

완전한 문제의 불완전한 해답을 구하느냐, 불완전한 문제의 완전한 해답을 구하느냐의 기로에서 toy model은 후자에 해당한다. 단순화되고 추상화된 유비 구조 위에서 우리는 보다 중요한 인과관계와 상관관계를 파악하길 원한다. toy model은 그걸 가능케 하는 수단 중 하나다. 물론 Ising model처럼 실용적이기까지 한 아름다운 toy model도 있지만, 그건 너무 예외적인 경우고.

240821에서 논했던 sub-optimal이 top-down이라면, toy model은 bottom-up이라고 할 만하다. 문제 해결에서는 둘 다 필요하지 않나 싶다. 좋은 toy model은 어떻게 구축해야 할까… 이런 생각을 하다가 그만두고 소설을 본 하루였다.

 

 

240825

늘어지게 잤다.