2021년 4월 28일 수요일

개똥철학

강화학습에서 숫자로 표현되는 보상(reward)의 개념을 사람에 적용해 생각해보다가, 생명체가 느끼는 고통이 어떻게 구현됐을까 하는 궁금증이 생겼다.

또, 고통을 느끼는 기계를 만드는 것은 가능할까? 그게 가능하다면, 윤리적일까? 윤리적으로 문제가 없다는 결론이 날지도 모른다. 보상과 처벌은 강화학습의 핵심이기 때문이다. 고통을 느끼지 못하면 몸의 이상을 알기 힘들다는 걸 국민학교 방학 때 탐구생활 책에서 읽은 기억이 난다.

사람마다 원하는 것은 조금씩 다르다. 여러 가지 욕구에 사람마다 다른 가중치를 두어 총합을 구할 수 있겠지만, 다양한 욕구를 외부에서 직접적으로 조절하는 건 현실적으로 불가능하므로 결국 금전적 보상으로 귀결되는 것 같다. 음의 보상(penalty)도 마찬가지로 현실 세계에서는 결국 과징금, 벌금 등을 매개로 한다. 아, 징역과 사형도 있구나. 태형이란 것도 존재했고. 게다가 사적 영역에서는 온갖 폭력이 자행된다.

그러면 사람에게 궁극적인 보상은 무엇일까? 단순히 고통이 없는 상태를 보상으로 간주하는 건 좀 잔인하다. 역으로 쾌락이 없는 상태를 고통이라고 하지도 않는다.

혹시 불교에서 말하는 '해탈'은 고통도 쾌락도 없는 상태일까? 그렇다면 불교는 보상과 처벌로 조종당하는 삶을 거부하는 움직임이겠다.

그러고 보니 옛날에 읽은 공상과학 소설에서, 마약과 같이 쾌락을 일으키는 물질을 공급하는 장치에 뇌를 집어넣고 조종한다는 설정을 본 것 같다.

2020년 9월 23일 수요일

데스크톱 PC 구입, 딥러닝 실습

모 포털 사이트 데이터 분석 대회 수상자의 솔루션을 소개하는 책 교정을 맡아서 하고 있다. 솔루션의 코드가 그래픽 카드를 이용해 딥 러닝을 하는 것이라, 기존에 사용하던 노트북으로는 실행할 수 없어 데스크톱 PC를 새로 샀다.

조립 PC를 알아보고 직접 구성하는 데 시간과 노력을 들일 여력이 없어, 대기업에서 나온 윈도우까지 사전 설치된 제품을 선택했다. HP OMEN 30L 중 NVIDIA 2080ti가 들어간 것으로 했다. 이번 교정비보다 더 비싸다. 요즘 엔비디아에서 성능이 더 좋고 가격도 저렴한 신상품이 나오는 중이라 조금 더 기다릴 수 있으면 좋았겠지만 당장 테스트 결과를 내는 것이 중요했다. 

사실은 이번 달까지 보안 책 번역 끝내고 나면 게임용 PC를 사서 놀아야겠다고 생각하던 참이다.




2020년 7월 31일 금요일

edX C 프로그래밍 수강, 맥에서 gcc 사용을 위해 명령행 개발자 도구 설치

edX의 C  Programming with Linux Certificate 프로그램을 수강하고 있다. 7개 코스가 하나의 프로그램을 이루는 것으로, 유료로 수강해 수료하면 Professional Certificate를 준다. 동기 부여를 위해 유료로 수강 중이고, 현재 3개 코스를 마치고 네 번째를 듣고 있다.

전에도 edX에서 수업을 몇 가지 들었는데, 지나고 나면 기억이 희미해지는 것이 아쉬웠다. 그래서 이번에는 수업 내용을 위키독스에 영어로 배우는 C 프로그래밍이라는 이름으로 정리하고 있다.

이 수업은 PC에 컴파일러를 설치하지 않고 웹 브라우저에서 바로 해볼 수 있다.

포인터 연산 수업을 듣고 객관식 문제를 풀다가 같은 문제를 자꾸 틀려서 코드를 직접 작성해서 테스트해보니 예상과 다르게 나왔다. 혹시나 컴파일러가 달라지면 다르게 작동할까 싶어, 맥북에서 한 번 더 테스트해보았다.

코드:

% cat pointer.c
#include 

int main(void) {
    int numbers[] = {4, -1, 8, 3, 0, -11};
    printf("%d", numbers[10]);
    return 0;
}


gcc를 사용하기 위해 명령행 개발자 도구를 설치:

% xcode-select --install

컴파일:

% gcc pointer.c
pointer.c:5:18: warning: array index 10 is past the end of the array (which
      contains 6 elements) [-Warray-bounds]
    printf("%d", numbers[10]);
                 ^       ~~
pointer.c:4:5: note: array 'numbers' declared here
    int numbers[] = {4, -1, 8, 3, 0, -11};
    ^
1 warning generated.


실행:

% ./a.out
1860979913

실행 결과를 확인하니 아차 싶었다. C 언어를 옛날에도 배웠고 지금도 다시 배우고 있음에도, 특성을 정확히 이해하지 못한 부분을 이 문제가 잘 지적해주었다.