침묵을 의도적으로 사용할 수 있는가?

 

내 멘토 중 한 분은 때때로 침묵을 고수했다. 그 때 마다 거기에 이끌려 쩔쩔 매었던게 생각난다. 책을 본 순간 멘토가 떠올랐고 어쩌면 멘토의 능력을 나도 익힐 수 있지 않을까 해서 읽게 되었던 책이다.

내용의 핵심은 의도적으로 침묵할 수 있어야 한다는 것이다. 책에서는 크게 중요성, 장점, 방법, 주의점을 소개해준다. 내용이 어렵지도 않고 얇아서 쉽게 읽혔다.

책에서 말하는 침묵의 장점으로는 상대를 당황하게 만들 수 있다는 것이고, 생각을 자극하게 하며, 심지어 협상과 연설에서도 사용할 수 있다고 하며 여러 일화들을 소개해준다.

일상에서 자주 사용되진 않겠지만 필요할 때에 맞춰 사용한다면 하나의 작은 무기가 될 것 같다.

"깊이 있는 인간의 아우라는 침묵의 결과이다" - 코르넬리아 토프

별점: ⭐️⭐️

 

불이 되어 바람을 맞이하라.

프래질이라는 것은 쉽게 부서진 다는 의미이다. 하지만 안티 프래질은 쉽게 부서지지 않는다는 의미가 아닌, 고통과 충격을 가할 수록 더 강해진다는 의미이다.

저자는 전 세계 어떤 나라에서도 존재하지 않던 안티 프래질이라는 개념을 창안했다. 이 저자는 2008년 금융위기를 예측했던 것으로 유명하다. 이 책에서 말하는 핵심은 기꺼이 불확실성을 받아들여야 한다는 것이다. 그 이유를 경제, 사회, 정치 다양한 분야에서 안티 프래질이 더 유리한 이유를 설명한다. 불확실성, 스트레스, 무작위성, 가변성과 함께한 삶이라면 우리를 더 번창하게 한다고 말한다.

읽은지 2년이 지났지만 이 책으로 부터 배웠던 것 중 기억나는 것이 있다면 당연한 것이지만, 사회적으로 낮은 계층에 있는 사람을 무시해서는 안된다는 것이다. 자신이 존재할 수 있는 이유는 상대적으로 프래질한 사람이 있기 때문이며 그러한 사람 없이는 자신이 안티프래질해질 수 없다는 것이다.

태어나 처음으로 한 700여 페이지 되는 분량을 읽어 본 책이었다. 인턴 시절 회사 마치고 쪼개고 쪼개서 읽었지만 모르는 것들 투성이었기에 힘들지 않고 오히려 기뻤다. 기꺼이 처음 책을 읽는 내게 나도 두꺼운 책을 읽을 수 있구나 생각하게 만들어준 책이다.

"바람은 촛불 하나는 꺼트리지만 모닥불은 활활 타오르게 한다. 불이 되어 바람을 맞이하라." - 나심 니콜라스 탈레브

별점: ⭐️⭐️⭐️

우리는 늘 잠을 잔다. 그리고 잠의 효능도 알고 그 중요성에 대해서도 들어보았거나 알고 있다. 하지만 우리 대부분은 겉으로 알고 있지만 그 중요성을 제대로 알지 못해 수면 건강을 챙기지 못하고 있다. 알람 없이 상쾌하게 일어날 수 있는 날이 언제였는가? 아마 대부분은 답하기 어려울 것이다.

수면 주기와 생존 적합도

사람은 개개인별로 3가지 수면 주기가 있다. 첫 번째는 아침형 인간으로 전체인구의 40%에 해당하며, 두 번째는 저녁형 인간으로 전체 인구의 30%에 해당한다. 마지막은 아침형과 저녁형 인간의 중간인 사람들로 전세계 인구의 30%에 해당한다. 왜 사람마다 이런 차이가 발생하게 된 것일까? 가장 설득력 있는 근거는 우리 조상의 생존 적합도를 높이기 위함이라는 것이다. 낮에 사냥과 채집과 같은 활동을 하다가 밤이 되면 잠에 들게 되는데, 이 때 모든 무리의 구성원이 잠을 자게 된다면 외부의 위협으로부터 위험하다. 때문에 두 그룹의 구성원으로 나누어 잔다는 것이다. 가령 첫 번째 그룹은 오후 9시나 10시에 잠이 들어 오전 4시 오전5시에 깬다면 두 번째 그룹은 보초를 서다가 오전 1시나 2시에 잠이 들어 오전 10시나 오전 11시에 깬다는 것이다. 이렇게 함으로써 외부의 위협으로부터 어느정도 안전해질 수 있다. 이러한 방식으로 진화해온 결과가 지금의 수면 주기의 차이를 빚어낸 것이다.

 


하지만 현대 사회에는 이러한 진화 과정의 차이를 무시한 채 저녁형 인간에게 약간의 불이익을 가하고 있다. 첫 번째는 저녁형 인간이 게으르다는 인식을 심는 것이며, 두 번째는 일과의 시작이 아침형 인간을 중심으로 이루어진다는 것이다. 때문에 저녁형 인간은 오후쯤 되어 활동을 하다가 비교적 늦게 잠이 들게 되는데 일과가 아침에 몰려 있다보니 충분한 수면에 있어 불리함에 놓이게 된다. 이러한 차이를 알고 있는 기업들이 있기 때문에 자율출퇴근제도나 수면실을 갖추게 되는 것으로 보인다. 여담이지만 저녁형 인간에 가까운 나로서는 향후 창업을 할 경우 자율출퇴근제도와 수면실을 반드시 갖출 것이다.

 

수면의 원인과 카페인

우리는 왜 수면을 할까? 왜 낮에 깨어 있다가 밤이 되면 잠이 올까? 그 답은 수면에 관여하는 단백질인 아데노신에 있다. 우리가 깨어있는 동안 꾸준히 뇌의 어딘가에 아데노신이 쌓이게 된다. 그래프로 표현하자면 시간의 흐름에 따라 하락하지 않고 아데노신이 꾸준히 상승하는 선형에 가까운 그래프라 볼 수 있다. 이 물질이 우리에게 수면 압력을 가하는 물질이다. 때문에 졸음이 쏟아지게 되며 비로소 우리는 잠을 자는 것이다. 잠의 효능 중 하나를 먼저 이야기하면 이 아데노신이 청소된다는 것이다. 하지만 만약 잠을 적게 자거나 못자게 되면 아데노신이 청소되지 않아 다음날도 피로감이 쉽게 찾아오고 잠이 계속 오게 된다는 것이다. 8시간 정도를 자야 아데노신을 말끔히 청소할 수 있다. 사람마다 개인차는 있지만 4~6시간만 자도 괜찮다는 사람은 정말 전 세계적으로 극소수라고 한다. 어느 한 뇌과학자는 전세계에서 5시간 미만으로 자도 괜찮은 사람의 비율을 올림 해도 0이라고 한다. 즉, 우리 모두는 잠을 잘 자는 것에 있어서 벗어날 수 없다는 것이다.

 


충분한 수면을 하지 못하게 되는 원인 중 하나는 흔히 카페인이 있다. 카페인은 석유다음으로 가장 많이 거래되는 상품으로, 카페인의 효능은 모두 알다시피 각성의 효과가 있다. 약 30분 뒤가 최고조라고 알려져 있다. 하지만 카페인이라고 하는 것이 반감기가 있다는 사실을 아는가? 카페인의 반감기는 평균 5시간에서 7시간이다. 때문에 매일 마시게 되는 사람들은 반감되어 사라지기도 전에 계속 섭취하게 되는 것이다. 이 카페인의 부정적인 측면은 바로 아데노신의 수면 신호를 차단하는 물질이라는 것이다. 밤 늦게 카페인을 마시게 되면 뇌가 반대세력인 카페인에 맞서 싸우게 되기 때문에 쉽게 잠이 오지 않거나 잠을 설치게 되는 것이다. 그렇다고해서 디카페인을 주로 마시는 것도 권장되지는 않는다. 디카페인은 용어 그대로와는 달리 기존 카페인의 15%~30%가 들어 있기 때문에 이름 그 자체와는 거리가 멀다.

수면의 종류와 특징

수면의 중요성을 말하기 위해 먼저 수면의 종류를 살펴볼 것이다. 수면은 크게 비렘수면과 렘수면이 있다. 렘(REM)수면이란 Rapid Eye Movement를 의미하는 것으로 수면 중 우리의 눈이 빠르게 움직이는 수면 상태를 말한다. 우리는 수면도중 이런 비렘수면과 렘수면을 반복적으로 거치게 된다. 여담이지만 렘수면의 주기가 90분인 것을 이용해 1시간 30분 단위로 자면 깨어날 때 조금 덜 피곤하다는 점을 이용하여 수면에 적용하는 사람도 있다. 2년전 우연히 만났던 서울대학교 학생이 그랬다. 처음에는 그런 것도 있구나 하고, 서울대생은 다르구나 느꼈다. 그때까지만해도 단순히 그런 것이 있구나 싶었는데 이런 렘수면의 중요성을 알게 된 것은 최근들어서이다.

 


여하튼 이런 렘수면과 비렘수면 사이에는 90분이라는 주기가 있다고 했다. 초반부에 비렘수면 상태가 우세하고 후반부에 렘수면 상태가 우세해진다. 비렘수면은 낮 동안 받아들였던 신호를 큼직큼직하게, 덩어리로, Abstract하게 처리하여 기억 다발에다 연결한다. 반면 렘수면은 낮 동안 받아들였던 신호를 미세미세하게, 조각으로, Concrete하게 처리하여 기억다발에다 연결한다. AI에 관심이 있는 사람으로써 AI로 비유를 하자면 BERT라는 자연어처리 모델이 있을 때 일반화된 성능을 위해 pre-training하는 것이 비렘수면의 기능이며 구체적인 태스크를 수행하기 위해 fine-tuning하는 것이 렘수면의 기능이라 이해할 수 있다. 사람은 8시간을 자야 비렘수면과 렘수면을 통해 pre-training, fine-tuning이 가능해지면서 기억을 강화할 수 있다. 하지만 만약 2시간을 덜자서 6시간 밖에 잠을 못잤다면 어떻게 될까? 논리적으로는 25%가 줄었지만 기억을 미세하게 다루는 렘수면 단계가 후반부에 몰려있기 때문에 Concrete하게 처리하는 과정의 60%~90%를 잃게 된다. 이런 렘수면과 비렘수면의 메커니즘 때문에 수면 시간을 충분히 하지 않을 경우 기억 강화에 심각한 손상을 입게 되고 학습 능력에 저하가 오게 된다.

 

 

렘수면과 운동신경

잠을 잘 때 누구와 싸우는 꿈을 꾼적이 있는가? 그렇다면 그 때 주먹이 날아가지 않아 답답했던 적은 없는가? 싸우는 꿈을 꿀때면 주먹이 나가지 않아 시원하게 펀치를 날릴 수 없어서 매우 가슴이 언짢은 상태로 깼다. 이는 렘수면의 특징이라고 한다. 렘수면 때 꿈을 꾸게 되는데 렘수면 상태가 되면 몸의 근육 활동이 '불법화' 된다는 것이다. 즉 근육억제체계가 활성화되어 꿈을 꿀 때 몸을 구금시키게 된다. 때문에 몸이 움직이지 않게 되는데 이는 생존을 위한 것이라고 한다. 우리는 잠을 자면서 주위 환경에 대한 의식을 인지하지 못하기 때문에 만에 하나 꿈과 현실을 구분하지 못해 주먹질을 하고 일어나거나 달리게 된다면 위험해진다는 것이다. 자연은 우리가 렘수면을 취하는 동안 우리의 몸이 움직이지 못하도록 프로그래밍 한 것이다. 이런 근육억제체계는 우리가 자라면서 계속해서 형성된다.

우리가 자라면서 근육억제체계가 계속해서 형성되기 때문에 태아 때는 발달 되지 않은 상태이다. 산모의 배에 태아의 손이나 발이 움직이는 것을 본적이 있을 것이다. 태아의 경우 대부분의 상태를 렘수면 상태로 보낸다. 렘수면의 전형적인 특징이 뇌의 전기 활성이 무작위로 솟구치게 되며 그로 인해 태아의 팔다리가 움직이게 되는 것이다. 성인의 경우 렘수면시 근육억제체계가 발달해서 움직이지 못하지만 태아의 경우 근육억제체계가 발달되지 않아 몸이 렘수면 상태임에도 불구하고 움직이게 되는 것이다.

렘수면의 다른 특징으로는 깨어있을 때 집중하는 뇌파와 동일하다는 것이다. 이를 통해 신경 통로들이 무성하게 자라도록 자극하며 각 통로에 시냅스 말단을 풍부하게 덧붙이게 된다. 태아의 발달 2분기 3분기 때 뇌와 구성 부분의 세세한 측면이 빠르게 형성되는데 그 때 렘수면이 대폭 늘어나는 시기이기도 하다. 이는 우연의 일치가 아니며 때문에 우리 성인도 낮 동안 학습한 것을 세세하게 신경다발로 연결하기 위해서는 잠의 후반부에 몰린 렘수면을 충분히 취할 수 있어야 한다는 것이다. 실제로 태어나기 전이나 태어난 직후에 발달중인 아기의 렘수면을 방해하거나 교란하면 후유증이 생기며, 렘수면만 막더라도 태아의 발달 과정이 지체된다.

 

비렘수면의 특징

비렘수면 시 강한 뇌파가 전두엽에서 생성된다. 이 뇌파가 뇌의 전반에 신호를 보낸다. 추후 아래에서 다시 한번 이야기하겠지만 이 신호는 수면방추라는 뇌파이다. 수면방추가 많이 일어나면 일어날수록 우리는 일어났을 때 개운하다고 느낄 수 있다. 수면방추의 특징은 짧고 강력한 뇌파인데, 운동 신경에도 관여하여 낮에 축적된 피로도를 줄일 수 있다. 또한 학습할 수 있는 일종의 공간을 다시 재마련해주는 일종의 휴지통 비우는 작업을 한다. 실제로 기억하는 자료의 양 사이의 상관관계는 깊은 렘수면을 더 취할수록 다음 날 더 많은 정보를 기억한다. 사람은 기억하라고 한 것과 기억하지 말라고 한 것을 분류하는 작업은 이러한 비렘수면을 취할 때 일어난다.

 

수면패턴의 변화

인간은 자라면서 수면 패턴이 바뀌게 된다. 크게 다상 수면, 이상 수면, 단상 수면이 있다. 먼저 다상 수면이란 분할 수면을 의미하는 것으로 아이처럼 여러번 일어났다 깼다 하는 수면 패턴을 의미한다. 때문에 다상 수면의 경우 유아기에서 많이 볼수 있는 특징이다. 이러한 다상 수면이 일어나게 되는 원인은 무엇일까? 답은 인간의 몸안에 있는 하루 주기 리듬을 조절하는 기관에 있다. 그 기관은 시교차상핵이라 하여 뇌 속에서 시신경들이 교차하는 지점 바로 위에 존재한다. 역할로는 태양과 같은 빛 신호를 추출해서 약 24시간 주기를 맞춰준다. 하지만 빛 신호가 아니더라도 기온 변화나 규칙적인 음식과 같이 반복되는 신호들에 연동되면 점점 더 강하게 하루 주기 리듬이 맞춰지게 된다.

이러한 이유로 갓 태어난 아기는 시교차상핵에 하루주기리듬이 매여있지 않으므로 첫돌이 지나 일정한 주기가 생길때까지 다상 수면 패턴을 유지게 하게 된다. 만 4세쯤 되면 다상수면 패턴에서 이상 수면 패턴으로 넘어가서 밤에는 쭉자고 낮에 한 차례 정도 낮잠을 자게 되고, 이후 유년기가 끝나게 되면 단상 수면 패턴으로 바뀌면서 낮에 깨어있다가 밤에 자는 패턴이 된다.

기억용량과 수면의 상관관계와 수면방추

해마와 주위 기관

수면은 우리가 낮에 배웠던 학습 내용들을 단기기억에서 장기기억으로 옮기는 역할을 하게 된다. 단기기억에 관여하는 기관은 해마(Hippocampus)로, 일종의 용량 작은 USB이다. 잠을 자면서 해마에 들어 있던 학습 내용을 장기기억에 관여하는 기관인 피질(Cortex)에 옮기게 된다. 피질은 일종의 대용량 하드 디스크(HDD)이다. 잠을 잠으로써 해마에서 피질로 정보가 옮겨지면서 기억 공간의 용량을 확보하는 효과를 누릴 수 있게 된다. 이와 관련해서 실험이 하나 있다. 실제로 학습을 시킨 뒤 낮잠을 잔 그룹과 낮잠을 자지 않은 그룹의 학습 능력과 기억력을 평가한 결과 낮잠을 잔 그룹이 20%가 높다는 연구 결과가 있었다. 즉, 수면이 뇌로 하여금 학습을 가능하게 하는 용량을 복구하여 새로운 기억을 위한 공간을 마련한 것이다.

수면방추 (sleep spindle)


그렇다면 어떤 원리로 새로운 기억 공간을 마련할 수 있는 것일까? 그 답은 수면방추라는 뇌파에 있다. 약 8Hz ~ 14Hz에 해당한다. 이 수면방추는의 특징은 비렘수면 단계때 전기 활성이 짧고 강력하게 치솟게 한다. 낮잠을 잘 때 수면방추가 많이 나타났다면 깨어났을 때 단기 기억 용량을 더 많이 복원한다. 반대로 수면방추가 더 적게 나타나면 단기 기억 용량을 비우지 못했기 때문에 일어났을 때 학습 능력이 저하된다. 비렘수면에서 특이하게 발생하는 이런 수면방추 같은 경우는 아침에 가까울수록 특히 많이 나타난다고 알려져 있다. 정확히는 8시간 수면 중 마지막 2시간쯤에서 수면방추가 가장 많이 치솟는다고 한다. 수면방추는 단기 기억 용량을 늘릴 뿐만아니라 기억력에도 관여한다고 한다. 해야 할 것 기억하지 말아야 할 것을 잘 구분한다고 하며, 이에 대해서 구체적으로 정확히 아는 바는 없지만 솟구치는 전기 활성으로 인해 가진 더 많은 에너지로 넓은 범위의 신경 회로 전달하기 때문이 아닐까 한다.

마지막으로, 수면방추는 운동 신경에도 관여한다고 한다. 운동을 한 뒤 잠을 자게 되면 수면방추는 비렘수면 때 학습했던 운동 역량을 미세하게 다듬는다고 한다. 이를 운동기술기억 향상이라하며 또한 수면방추를 통해 근육피로도를 줄이고 활력을 다시 샘솟게 할 수 있다. 그래서 올림픽과 같은 대회에 서는 선수들의 역량을 가르는 핵심 요인 중 하나로 시합 직전의 낮잠이 있다고도 한다. 실제로 우사인볼트는 대회 몇 시간 전에 낮잠을 자고 일어나 세계기록을 세웠다.

수면과 질병의 상관관계

기억력 저하
노년이 되면 잠이 잘 오지 않는다고들 한다. 하지만 이런 양상과는 달리 노년에도 청년이나 중년처럼 많은 잠이 필요하다. 다만 필요한 만큼 잠을 잘 수 없을 뿐이다. 40대 중후반으로 들어서게 되면 10대 때 누렸던 깊은 수면 중 60% ~ 70%가 사라진다고 한다. 여기서 핵심 문제점은 깊은 수면이 줄어드는 것 뿐만 아니라, 우리가 잠을 얼마나 푹 잤는지 평가할 수 있는 평가지표가 없다는 것이다. 즉 사람들이 자신이 늙어 갈수록 자신의 깊은 잠의 양과 질이 얼마나 떨어지는지 깨닫지 못한다. 이로 인해 노인들은 수면악화와 건강악화가 연결되어 있음을 알아차리지 못하게 되는 것이다. 수면이 만성적으로 악화, 교란된다면 신체 질병이나 정신 건강 불안정, 각성도 저하, 기억 장애가 발생하게 된다.

나이가 들면 가장 극적으로 퇴화하는 영역은 전두엽이다. 전두엽의 역할 중 하나는 비렘수면 시 강한 뇌파를 생성하여 뇌의 전반에 신호를 보내주는 역할을 한다. 하지만 비렘수면과 관련된 전두엽의 기능이 떨어지면서 뇌의 전반에 신호를 보내지 못하게 된다. 이로 인해 수면의 양과 질이 떨어지게 되는 것이며, 이로 인해 학습 능력이 떨어지고 결과적으로 기억력이 저하 된다. 노년에 나타나는 이런 기억력 저하와 수면 악화의 경우 우연의 일치가 아닌 것이다.

자폐증
렘수면 부족은 자폐증과도 연관성이 있다. 자폐증의 핵심 증상은 사회적 상호 작용의 부족이라 할 수 있다. 자폐의 정확한 원인은 제대로 밝혀지지 않았지만 뇌 초기 발달 단계 때 시냅스 형성 과정에서 부적절한 배선이 장애의 핵심이라고 여겨지고 있다. 여기서 흥미로운 것은 자폐 진단을 받은 자폐아의 수면 패턴과 비자폐아의 수면 패턴이 다른데, 수면 패턴 차이점의 핵심은 렘수면 부족이다. 앞서 언급한 바와 같이 학습한 내용을 렘수면을 통해 우리 신경 회로들을 추가하고 붙이는 역할을 하지만 그 회로가 잘못 놓여 있고, 그 회로를 형성에 관여하는 렘수면이 매우 적다는 것이다. 실제로 자폐아의 경우 비자폐아에 비해 렘 수면 양이 30% ~ 50%가 부족하다고 알려져 있다.


수면 장애
불면증이나, 수면과다증, 기면증의 경우 수면방추가 비정상적으로 감소하거나 증가됨으로써 발생한다. 만약 불면증 환자라면 수면방추를 늘려주는 방식으로 수면 장애를 치료할 수 있고, 수면과다증 환자의 경우 수면방추를 감소시켜주는 방식으로 수면 장애를 치료할 수 있다.

알츠하이머
실제로 비렘수면이 제대로 이루어지지 않으면 알츠하이머 발병에 많은 확률을 높인다. 알츠하이머는 베타아밀로이드라는 물질이 뇌안에 쌓이면서 발생하게 된다. 참고로 베타아밀로이드는 알츠하이머의 직접적인 원인은 아니다. 하지만 알츠하이머 환자를 분석했을 때 베타아밀로이드라는 일종의 끈적한 단백질이 쌓여 있어 주요 바이오 마커가 된다. 원래 베타아밀로이드는 원래 우리 몸의 방어기제로서 생성되는 긍정적인 단백질이다. 우리 몸에 독소가 들어와 시냅스를 파괴하려고 할 때 독소들을 끈끈하게 만들어 시냅스 파괴를 하지 못하도록 만든다. 정상적으로 생성된 베타아밀로이드는 비렘수면 때 나오는 글림프계의 뇌척수액에 의해 씻겨내려간다. 하지만 비렘수면이 줄어들게 된다면 뇌척수액에 다 씻겨내려가지 못한 부분이 남아있게 되고 이게 축적되면 알츠하이머가 되면서 되려 시냅스를 파괴하여 인지기능의 저하와 나아가 자신 스스로를 잊게 되는 증상을 가져오오게 되는 것이다. 실제로 생쥐를 비렘수면에 들지 못하게 막았다니 그 즉시 뇌안에 아밀로이드가 쌓이는 연구 결과가 있었다. 이렇듯 부족한 잠은 알츠하이머병을 유발하고 상호작용하면서 악순환을 일으키기 때문에 수면은 중요하다.

 

졸음운전과 미세수면

수면을 충분히 취하지 못하면 운전석에서 일시적으로 집중력을 상실하는 미세수면에 빠질 수 있게 된다. 미세수면 때는 우리 뇌는 잠시 바깥 세계와 단절이 된다. 시각 뿐 아니라 모든 지각 영역이 그렇다. 그 시간에 어떤 일이 일어났는지 지각하지 못한다. 실제로 경험을 해보니 확 느끼게 되었다. 운전면허시험 때 하룻밤을 새고 갔더니 정지 신호 받은 뒤 약 몇 분간의 시간이 블랙아웃되어 사라지는 경험이 있었고 정말 주의할 필요가 있다는 교훈을 얻게 됐다. 실제로 오전 7시부터 온종일 깨어있다가 새벽에 차를 몰고 귀가할 때는 음주 운전자만큼 지장을 받는다고 한다. 수면시간감소와 자동차 사고 사망률 그래프는 기하급수적인 양상을 띤다. 졸음운전은 음주운전과 위험 수준이 동일하다.

감정 조절과 수면

수면이 부족하게 되면 뇌의 양쪽에 있는 편도체에서 감정 반응을 60% 증폭시킨다. 잠이 부족하게 되면 뇌가 통제가 안되는 원시적인 양상으로 돌아가게 된다. 구체적으로 수면을 제대로 취하지 못하게 되면 편도체와 전전두엽피질 사이의 불균형이 발생한다는 것이다. 편도체는 일종의 감정가속폐달과도 같고 전전두엽피질은 브레이크와도 같은데 잠을 잘 못자게 되면 이 둘 사이의 강한 연결이 끊기게 된다고 한다.


"우리는 얼마나 수면부족이 우리에게 영향을 미치는지 알지 못한다. 모든 사람이 일관되도록 자신의 수행 능력 감소를 과소평가 한다"

Reference

[1] 『왜 우리는 잠을 자야할까?
[2] https://www.scienceall.com/불면증은-이제-그만/

* 구현 코드만 확인하고 싶은 경우 맨 아래의 깃허브 링크를 참조.

 

1. Competetion 개요

3년전 캐글에 올라온 주제인 Real and Fake Face Detection이라는 competition이 있다. 소셜 네트워크를 사용할 때 가짜 신분을 사용하는 사람이 있고 이를 탐지하여 WWW을 더 나은 곳으로 만들자는 것이 이 competition의 목적이다.

 

Competetion의 핵심 task는 크게 아래 2가지를 탐지하는 것이다. 

 

1. 데이터셋 내에서 변조된 얼굴 이미지변조되지 않은 얼굴 이미지분류하는 것

 

2. 만약 얼굴 이미지가 변조되었다면 변조된 영역분류하는 것

 

변조된 영역은 아래와 같이 네 부분으로 나뉜다. 왼쪽 눈, 오른쪽 눈, 코, 입이다. 

 

 

2. 데이터셋 구성 및 특징

데이터셋의 경우 포토샵 전문가가 변조/합성한 얼굴 이미지와 변조/합성하지 않은 얼굴 이미지로 구성되어 있다. 이렇게 포토샵으로 만들어진 데이터셋의 경우 GAN 기반의 데이터셋과 비교가될 수 있다. 이 데이터셋을 만든 배경은 GAN으로만은 충분하지 않다는 것이다. GAN은 Fake 이미지를 생성하기 쉬울 뿐더러 포토샵 전문가가 만드는 것과 GAN이 만드는 메커니즘 자체가 다르기 때문에 GAN이 학습한 패턴은 무의미할 수 있다는 것이다.

 

데이터셋 폴더 구성은 아래와 같다. 

 

 

데이터셋은 크게 두 개로 훈련 데이터셋(real_and_fake_face_detection)과 테스트 데이터셋(real_and_fake_face)으로 구성되어 있고, 이는 다시 각각 합성 이미지(training_fake)와 원본 이미지(training_real)로 구성되어 있다. 특히 합성 이미지의 경우 난이도가 크게 3가지로 easy, mid, hard로 나뉜 것이 특징이며 아래와 같이 mid 난이도만 되어도 시각적으로 합성 여부 탐지가 어려운 것이 특징이다.

 

mid_389_1101.jpg

 

라벨링된 이미지를 확인하던 도중 아래와 같이 라벨링이 잘못되어 있어 학습에 사용하기 어려운 이미지를 확인하였고, 따라서 아래의 해당 이미지는 학습에서 제외하였다. 

 

라벨링 오류 데이터셋 (easy_116_111.jpg)

 

따라서 본 Task를 수행하기 위해 아래와 같이 총 4,080장의 데이터셋을 이용하였다.

구분 폴더명 장수 중합 총합
train training_fake 959장 2,040장 4,080장
training_real 1,081장
test training_fake 959장 2,040장
training_real 1,081장

 

캐글에서 배포하는 이 데이터셋에서 아쉬운 점은 크게 두 가지가 있는데 첫 번째는 폴더 구성이 그다지 직관적이지 않다는 것이며, 두 번째는 training set과 test set이 동일한 데이터셋으로 구성되었다는 것이다. 그러다 보니 결과적으로 높은 성능이 나오기 쉬운 구조다. 하지만 본 데이터셋을 통해 캐글에 처음 입문하는 케이스로는 해볼만 하다고 판단된다. 

 

 

 

 

3. 관련 연구

관련 연구를 찾기 위해 SOTA (State Of the Art) 연구를 모아둔 Paperswithcode라는 사이트에서 fake face detection과 관련된 자료를 찾던 도중 아래와 같은 연구를 확인할 수 있었다.

논문을 리뷰해본 결과 위 연구에서 사용하는 데이터셋이 GAN으로 만들어진 것이 아니라 본 competition과 동일하게 포토샵 기반의 데이터셋을 이용하는 것을 확인하였다. 

 

 

위 연구에서 실험을 위해 OpenImage와 Flickr에서 데이터셋을 마련하였으며 크게 변조되지 않은 이미지와 변조된 이미지로 구성하여 훈련, 검증, 테스트 셋으로 나누었다. 변조된 이미지의 변조 방법의 경우 Random FAL(일종의 변조 자동화 포토샵 스크립트)과 Pro Artist가 변조하는 방법을 사용하였다. 

 

저자는 실험을 위해 크게 두 가지 모델을 만들었다. 이는 얼굴이 합성되었는지를 여부를 식별하는 글로벌 분류 모델과 합성된 위치를 예측하는 로컬 분류 모델이다. 따라서 위 연구를 기반으로 본 competetion에서도 합성 탐지 여부 모델과 합성 부위 예측 모델을 만들었다.

 

저자들은 실험을 위해 ImageNet 데이터셋으로부터 Pretrained된 DRN(Dialted Residual Network)의 변형인 DRN-C-26 모델을 사용하였다. 이를 통해 얻은 실험 결과는 다음과 같다.

 

 

저자들은 모델에 대해 스크립트를 통해 랜덤으로 변조한 Random FAL 방식과 프로 아티스트가 변조한 Professional Artist 방식에 대해 모델의 성능을 측정하였다. 성능 측정 결과, 고해상도의 인풋이 들어가면 더 높은 성능을 보이는 것을 확인하였다. 또한 augmentation이 없이 학습된 것이 더 뛰어난 것을 보였으나 augmentation을 적용한 것이 반대로 조금 더 모델이 robust한 결과를 보인다 하였다.

 

4. 모델 구현

4.1 원본/합성 판별 모델

위 관련 연구의 실험에 기반하여 이미지의 원본/합성 판별을 위한 모델과 합성된 위치를 예측하는 모델로 크게 두 개를 구현하였다. Pretrained Model을 사용하지 않고 학습을 위해 두 모델 모두 이미지 처리에 효율적이라 판단되는 Convolution Neural Network를 사용하였다.

 

4.1.1 레이어 구성

원본/합성 판별 모델 (syn_detect_model)

모델에 입력되는 이미지의 사이즈는 원본의 경우 600x600이나 원본 그대로 모델 학습시켜본 결과 시간이 오래 걸린다는 단점이 있어 300x300으로 축소하여 모델의 Input으로 지정하였다. 이후 Convolution 2D, Max Pooling, Batch Normalization, flatten, Dense 레이어로 모델을 구성하였고 출력 부분에는 sigmoid 함수를 통해 이진 분류가 가능하도록 하였다.

 

4.1.2 모델 학습 결과

 

학습 초반에는 위와 같이 loss 값이 0.9013, accuracy 0.5162로 시작하는 것을 확인할 수 있었고, 학습 종료 시점에는 아래와 같이 loss 값이 0.0479, accuracy가 0.9931임을 확인할 수 있었다. 또한 추가적인 다른 metric을 통해서도 학습이 전반적으로 잘 이루어지는 것을 확인할 수 있었다.

 

4.2 합성 위치 예측 모델

4.2.1 레이어 구성

합성 위치 예측 모델 (loc_detect_model)

합성 위치 예측 모델 또한 원본/합성 탐지 모델과 거의 동일한 구조를 가지고 있다. 차이점은 학습 과정에서 빠른 과적합이 이루어지는 것을 확인하였다. 따라서 Dropout 레이어를 추가하였고 출력 부분에는 라벨을 15개로 지정하여 softmax 함수를 통해 출력되도록 하였다. 라벨에 대한 구체적인 내용은 실험 부분에 기술하였다.

 

4.2.2 모델 학습 결과

학습 종료 시점에 아래와 같이 loss 값이 0.0586, accuracy가 0.9875임을 확인할 수 있었고 추가적인 다른 metric을 통해서 학습이 전반적으로 잘 이루어져 있음을 확인할 수 있었다.

 

 

5. 실험

5.1 원본/합성 판별 모델

5.1.1 이미지 어그멘테이션 (Image Augmentation)

어그멘테이션을 진행하지 않고 원본/합성 탐지 모델을 학습한 결과 충분한 성능이 도출되지 않았다. 때문에 어그멘테이션 작업을 필요로 했고 아래와 같은 옵션을 사용하여 어그멘테이션을 진행하였다.

 

구분 옵션 비고
훈련 데이터셋 horizontal_flip True 수평 플립
vertical_flip False 수직 플립
shear_range 0.2 기울기 비율
zoom_range 0.2 확대 비율
rescale 1/255. 이미지 스케일링
테스트 데이터셋 rescale 1/255. 이미지 스케일링
validation_split 0.2 훈련/평가 분할 비율

 

모델의 Robustness를 위해 수평 플립을 True로 설정하였고 기울기와 확대 비율에 대해 주로 사용되는 값인 0.2를 설정하였다. 또한 훈련 데이터셋과 테스트 데이터셋에 대해 각각 이미지 스케일링을 적용하였고 테스트 데이터셋에 대해서는 0.2 비율로 평가와 테스트 데이터셋으로 나누었다. 어그멘테이션 옵션을 적용한 결과는 다음과 같다.

 

 

Training 데이터셋 2,040장 Validation 데이터셋 1,633장 Test 데이터셋 407장에 대해 어그멘테이션을 진행하였다.

 

5.1.2 모델 레이어 구성

 

6개의 Convolution 2D 레이어와 3개의 Maxpooling 2D 레이어, 그리고 3개의 Batch Normalization 레이어를 구성하고 출력부분에는 활성화 함수로 sigmoid를 사용하여 합성 여부를 탐지할 수 있도록 만들었다. Dropout의 경우 모델이 과적합되지 않아, 별도로 적용하지 않았다. 모델의 옵티마이저는 RMSProp을 사용하였고 learning rate 값으로 0.00001을 사용하였다.

 

모델 구성의 순서에서 CS231n 강의 기준으로 Conv2D → BatchNorm → MaxPool2D 순으로 쌓는 것이 적합하다 하였으나 Conv2D → MaxPool2D → BatchNorm 형태로 구성하는 것이 더 학습 성능이 좋은 것을 실험적으로 확인하였다.

 

 

5.1.3 모델 학습 결과

100회의 에폭을 통해 학습한 결과는 아래와 같다.

학습 과정

Early Stop을 적용하여 58번째 에폭에서 종료되었고, 점진적으로 loss가 줄고, accuracy가 증가하는 양상을 확인할 수 있었다. 부가적으로 precision, recall, auc에 대한 평가 metric을 추가하여 확인할 수 있도록 하였다. 학습된 모델에 대해 validation set으로 평가한 결과 아래와 같다.

 

 

결과 값으로 Loss값 5.6%, Accuracy값 98.7%, Precision 99.4%, Recall 98.0%, AUC 99.9%을 확인할 수 있다.

 

또한 별도의 인퍼런스 모듈을 생성하여 아래와 같이 확인하였다.

Inference 과정

 

최종적으로 합성 여부 탐지를 위해 Test 데이터셋의 모든 fake 이미지를 넣은 결과 위와 같이 대부분의 이미지가 올바르게 Inference되는 것을 확인할 수 있고, 일부 Real로 오분류 되는 것 또한 확인할 수 있다. Inference를 통해 최종적인 F1 Score의 경우 98.8%의 성능을 보임을 확인하였다.

 

F1 Score

 

5.1.4 손실함수 및 정확도 그래프 시각화

 

모델 학습의 초반부에 변화가 심한 양상을 보이기도 하나 점차 변화 폭이 좁아지면서 안정적으로 학습되는 것을 확인할 수 있다. Loss는 약 0.9에서 시작하여 0.05까지 줄어들며, Accuracy는 약 0.55부터 시작하여 0.99에 근접하게 학습되는 것을 확인할 수 있다.

 

5.2 합성 위치 예측 모델

5.2.1 데이터 프레임 생성

합성 여부와 달리 합성 위치에 대한 예측 모델을 만들기 위해서는 별도의 formal한 구조로 만들어 두어야 학습에 용이할 것이라 판단되어 아래와 같이 판다스(Pandas) 라이브러리를 이용하여 데이터프레임을 생성하였다.

Dataframe 생성

파일 이름의 합성 부위를 나타내는 4자리의 숫자만 추출하여 각각의 필드로 나타내었다. 특이한점은 label이라는 컬럼을 만들었는데 이는 기존 left_eye, right_eye, nose, mouth와 같이 별개의 컬럼을 라벨로 지정하여 학습을 시도한 결과, 방법론을 잘못 적용한 것인지 학습 결과가 좋지 않았다. 마지막 레이어에 sigmoid 또는 softmax로 Unit을 4로 설정하여도 학습 결과가 미미한 것을 확인하였다. 전반적으로 모델 설계 방식에 대한 방법론 조사를 시도했으나 크게 찾지 못하였다. 하지만 조사 도중 일부 예시에서 위와 같이 개개 별로 나누는 것이 아닌 하나로 통합하여 라벨로 두는 방법을 찾아 있는 것을 확인하였고, 이를 적용하였더니 학습 결과가 개선되는 것을 확인할 수 있었다.

 

5.2.2 이미지 어그멘테이션 (Image Augmentation)

합성 여부 탐지 모델과 달리 변조 부위 탐지 모델의 경우 합성된 이미지만 사용해야 했기에 충분한 학습을 위해 이미지 어그멘테이션 작업을 진행하였다. 다음은 이미지 어그멘테이션을 위해 사용한 옵션의 종류와 값을 나타내었다.

 

구분 옵션 비고
학습 데이터셋 horizontal_flip False 수평 플립
vertical_flip False 수직 플립
shear_range 0.2 기울기 비율
zoom_range 0.2 확대 비율
테스트 데이터셋 validation_split 0.2 훈련/평가 분할 비율

 

왼쪽 눈과 오른쪽 눈의 예측 위치가 바뀌어선 되지 않기에 수평 플립을 False로 주었고, 적은 데이터셋이기에 학습 데이터셋의 일부를 수직 플립하는 옵션 또한 False로 적용하였다. 나머지 옵션인 기울기, 확대, 분할 비율의 경우 일반적으로 0.2를 설정한다고 판단하여 값을 설정하였다.

 

Training Set의 경우 총 959개를 사용하였고, Validation Set과 Test Set은 0.2 비율로 각각 768개, 191개로 나누어 어그멘테이션을 진행하였다.

 

5.2.3 모델 레이어 구성 (Model Layer Structure)

 

합성 여부 탐지 모델과 동일하게 레이어를 구성하였으며 달라진 부분은 출력 부분에 합성의 경우의 수인 15가지에 대해 softmax 함수를 적용한 것이다. 15가지는 합성 부위 별로 나올 수 있는 경우의 수인 $2^4$에서 합성되지 않은 0000에 대한 경우를 제외한 것이다. 또한 Dropout 레이어를 추가하여 학습이 과적합 되지 않도록 하였다. Dropout을 0.1로 모두 적용하여 진행한 결과 적용하지 않은 것과 비슷하게 대부분의 평가 메트릭에서 99%대를 확인할 수 있었고, Dropout을 0.2로 적용한 결과 조금 더 느슨하게 학습되는 것을 확인할 수 있었다. 다음은 모델학습 결과이다.

 

5.2.4 모델 학습 결과

모델 학습 결과 (epoch: 61 종료)

 

61번째 에폭에서 Early stop이 적용되어 종료되었다. 점진적으로 loss가 줄고, accuracy가 증가하는 양상을 확인할 수 있었고, 부가적으로 precision, recall, auc에 대한 평가 metric을 추가하여 확인할 수 있도록 하였다. (그림의 가시성을 위해 val_precision, val_recall, val_auc 정보를 담지 않았다) 모델에 대해 Validation Set을 사용하여 평가한 결과 다음과 같다.

 

모델 Evaluation 결과

모델 성능 평가 결과 값으로 Loss 값 16%, Accuracy 값 96.9%, Precision 99.0%, Recall 94.0%, AUC 99.9%를 확인할 수 있다. 다음으로 학습한 합성 부위 예측 탐지 모델에 대해 합성 이미지 전체를 입력으로 넣어 추론을 진행하는 과정을 아래와 같이 진행하였다.

 

Inference 진행 과정

0 ~ 15사이의 값을 0001, 0010, 0011 ~ 1111 값으로 딕셔너리로 아래와 같이 매핑 해두었다.

 

 

실제 합성 이미지가 들어 갔을 때 실제 값과 예측 값을 출력하였으며 만약 다를 경우 Fail이라는 문자열을 출력하도록 하여 구분하도록 하였다. 올바르게 합성 부위를 탐지한 결과의 경우 부위를 합성 부위를 True/False로 표현하여 확인할 수 있도록 하였다. 전체 959장의 합성 이미지에서 Inference를 통해 F1 Score를 계산한 결과는 다음과 같다.

 

 

Inference 진행 결과, F1 Score 97.0%로 학습이 매우 잘 이루어졌음을 확인할 수 있다.

 

5.2.5 손실함수 및 정확도 그래프 시각화

 

합성 여부 탐지 모델과 달리 초반 변화폭이 큰 양상이 없으며 전반적으로 loss 값이 줄어들고 accuracy가 증가하는 추세를 확인할 수 있다. 이와 같은 추세와 F1 Score를 통해 모델 학습 잘 이루어졌음을 알 수 있다.

 

코드: https://github.com/roytravel/fake-face-detection/

 

[1] 『Detecting Photoshopped Faces by Scripting Photoshop』 - ICCV 2019

문제 정의

문제의 핵심은 홀수인 자연수 N이 주어지면, 1부터 $N^2$까지의 자연수를 아래와 같이 달팽이 모양으로 $N * N$의 표에 채우라는 것이다.

 

입력

첫째 줄에 홀수인 자연수 N(3 ≤ N ≤ 999)이 주어진다. 둘째 줄에는 위치를 찾고자 하는 N2 이하의 자연수가 하나 주어진다.

 

출력

N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 출력한다.

 

 

접근 방법

알고리즘을 처음 접하는 입장으로써 주위 개발자에게 조언을 구했다. 처음엔 코드를 작성하면서 변수를 생각했다. 하지만 이것은 비효율적인 방법이라고 한다. 머리로 사용할 변수들을 최대한 미리 생각하고 이후에 필요에 따라 추가/제거 하는 것이 중요하다. 

 

1. 먼저 문제에서 바로 확인할 수 있는 변수 두 개인 홀수 자연수를 N으로 두고, 찾아야 할 값을 want로 선언하였다.

 

2. 찾아야 할 값 want의 2차원 좌표를 나타낼 변수를 x, y로 선언하였다.

 

3. 2차원 배열을 다루기 위해 사용되는 행렬을 row, col로 선언하였다.

 

4. 그리고 핵심이 되는 것은 dir(direction)이라는 방향을 나타내는 변수이다.

 

dir은 위와 같은 흐름으로 2차원 배열 변수에 값을 담기 위한 변수이다. dir을 1 또는 -1로 설정하여 row와 col에 더해줄 것이다. dir을 1로 설정하여 row에 더해줄 경우 자연스럽게 row가 증가하고, col에 더해줄 경우 col이 증가한다. 이후 dir을 -1로 설정하면 row가 감소하고, col이 감소한다. 이후 다시 dir을 1로 설정하면 row가 증가하여 최종적으로 1에 도달하는 식이다. (위 그림에 맞대어 row와 col에 dir을 더해주는 것을 시뮬레이션 해볼 것을 권한다. 이것이 문제 풀이의 핵심이다)

 

작성 코드

#include <iostream>
#include <cstring>

using namespace std;

int main(void)
{
	// 1. 변수 선언부
	int N = 0; // 입력 받을 홀수 자연수
	int want = 0; // N^2 이하의 찾고자 하는 자연수
	int x = 0, y = 0 ; // Want의 좌표를 나타낼 x, y 값
	int row = -1, col = 0;; // 달팽이를 나타낼 행, 열
	int dir = 1; // 방향을 나타낼 변수
	cin >> N;
	int copy = N;
	cin >> want;
	int squared = N * N; // N^2을 표현할 변수

	int** arr;
	arr = new int* [N]; // 2차원 배열의에서 사용할 배열의 길이(row)

	for (int i = 0; i < N; i++)
	{
		arr[i] = new int[N]; // N = 2차원 배열에서 사용할 배열의 길이(column)
		memset(arr[i], 0, sizeof(int)*N); // 0으로 배열 초기화 for security.
	}


	// 2. 핵심 알고리즘 동작부
	while (squared > 0)
	{
		for (int i = 0; i < copy; i++)
		{
			row = row + dir;
			arr[row][col] = squared;
			if (squared == want)
			{
				x = row + 1;
				y = col + 1;
			}
			squared = squared - 1;
		}

		copy = copy - 1;
		for (int i = 0; i < copy; i++)
		{
			col = col + dir;
			arr[row][col] = squared;
			if (squared == want)
			{
				x = row + 1;
				y = col + 1;
			}
			squared = squared - 1;
		}
		dir = dir * (-1);
	}

	// 3. 결과 출력부
	for (int i = 0; i < N * N; i++)
	{
		int r = i / N;
		int c = i % N;
		cout << arr[r][c] << " ";
		if ((i % N) == N - 1) cout << endl;
	}

	cout << x << " " << y << endl;


	// 4. 2차원 배열 할당 해제부
	for (int i = 0; i < N; i++)
		delete[] arr[i];
	delete[] arr;

	return 0;
}

 

코드는 크게 4개의 부로 구성된다.

 

1. 변수 선언부

알고리즘 작성 이전에 필요로 하는 변수를 선언한 부분이다.

 

2. 핵심 알고리즘 동작부

배열에 값을 넣기 위한 핵심적인 알고리즘이 동작하는 부분이다.

 

3. 결과 출력부

$N^2$부터 1까지 달팽이 모양으로 출력하는 부분이다.

 

4. 2차원 배열 할당 해제부

달팽이 모양으로 값을 담기 위해 생성했던 2차원 동적 배열을 할당 해제하는 부분이다.

 

 

참고로 memset 함수는 0, -1로만 초기화 가능하다. 그 이유는 바이트 단위로 초기화가 이루어지기 때문이다.

 

정답 비율 & 제출 결과

 

 

초반에 알고리즘 풀지 못했을 때 정답 비율이 50%나 된다는 것에 가벼운 충격을 받았다. 최소한 둘에 하나는 풀 수 있다는 생각에 말이다. 아무튼 동시에 초심자로서 알고리즘적 사고를 잘 하는 사람들이 많다는 것에 내게 자극을 심어준 문제였다.

 

Reference

[1] https://walewalu.tistory.com/4

 

당신은 승리를 위한 오너십을 갖고 있는가?


책의 핵심 키워드는 극한의 오너십이다. 리더는 자신이 속한 세상의 모든 것의 오너가 되어야 하며, 남 탓하거나 책임을 돌리지 말아야 한다는 것이다.

평소 읽고 싶던 13권의 책을 주문했을 때 함께 샀던 책이다. 육체의 한계를 넘도록 훈련받은 특수부대는 어떤 정신을 가지고 있을까 궁금했고 또한 특수부대원로써의 삶을 살았다면 어땠을까 하는 생각이 있었기 때문이다. 책에서 이야기하는 네이비씰로부터 도출된 여러 통찰의 특징은 삶의 전반 어느 곳에나 쓰일 수 있다는 것이다. 특히 저자는 기업경영컨설팅에도 동일한 원칙을 적용하는데, 전쟁 상황에서의 원칙이 기업에서도 다르지 않다고 한다.

책 내용 중 기록하고 싶은 것은 많지만 크게 두 가지만 뽑자면 아래의 내용들이다.

[나쁜 팀은 없다 나쁜 리더만 있을 뿐]
네이비씰에서 흥미로운 일화가 있다. 네이비씰 요원을 뽑기 위한 훈련에서 계속 일등을 하던 팀이 있었고, 계속 꼴등을 하던 팀이 있었다. 그 때 정확히 일등 팀의 리더와 꼴등 팀의 리더만 바꾸어 훈련을 진행하였다. 그 결과, 꼴등하던 팀이 계속 일등을 하게 된 것이다. 바뀐 것은 없었다. 리더만 제외하면. 팀이 문제라던 불평만하던 꼴등팀 리더는 그 사건을 계기로 훌륭한 장교로 거듭날 수 있었던 계기가 되었다고 한다.

[위와 아래를 모두 이끌어라]
리더쉽의 특징은 지휘 계통의 아래로만 흐르는 것이 아니라 위로도 흐르는 특징을 가진다. 때문에 우리는 우리를 둘러싼 모든 것의 오너가 되어야 한다고 말한다. 만약 상부에서 말도 안되는 질문을 한다면 그것은 상부가 원하는 정보를 제대로 보고하지 못한 우리의 잘못이며, 상부가 우리를 이끄는 것이 아니라 우리가 상부를 이끌어야 한다고 말한다.


또한 만약 상관이 동기부여를 하지 못해준다면 좌절하지 말고 스스로 동기부여 해야한다고 말한다. 책임지고 일하고, 기회로 삼아 일을 되게 만들어야 한다. 나약한 상관을 두고 있는 것은 내 활동 폭이 더 넓어지기 때문에 오히려 좋은 일이며, 반대로 상사가 강인한 사람이라도 좋은 일이라 말한다. 때문에 상사가 나약하다는 것은 변수가 되지 못한다고 일러준다. 만약 이렇게 극한의 오너십 정신이 팀 내에 배어 있으면 모든 팀원이 자발적으로 움직여 확실하게 최고의 성과를 내어 승리하는 팀을 만들 수 있다고 한다.

책 덕분에 반성하게 되었다. 올바르게 돌아가지 않고 있는 프로젝트가 있었고, PM이 강인한 리더십을 가지고 책임을 져야지하는 안일한 생각과 책임을 돌리는 태도를 가졌었다. 책을 읽고 생각이 바뀌게 되었다. 나는 책임 전가를 하지 않는다고 생각했었는데 실상은 그러지 않았다. 앞으로는 책임을 짊어지고, 이러한 극한의 오너십 정신을 지속적으로 추구하는 삶을 살 것이다.

 

"리더가 극한의 오너십을 체화하고 조직 내에 그 문화를 전파하면 나머지는 알아서 돌아간다." - 조코 윌링크


별점: ⭐️⭐️⭐️⭐️

 


이외의 내용 메모는 아래와 같다.

 

 

리더는 저성과자가 개선의 여지가 없다면 그를 내보내고 대체자를 찾는 악역도 감수해야 한다.

 

팀 내에 극한의 오너십 문화가 배어 있으면 모든 팀원이 자발적으로 움직여 확실하게 최고의 성과를 낼 수 있다.

 

리더가 임무에 대한 믿음을 가지면, 그 믿음은 지휘 계통 위아래로 퍼져 나간다. 확실한 믿음과 자신감에서 나오는 말과 행동은 단단하다.

 

어려운 문제가 동시다발로 터졌을 때는 반드시 우선순위를 정해서 실행하는 원칙을 고수해야 한다.

 

작전의 궁극적 목표를 정확하게 이해하면 대원들이 일일이 허락을 구하지 않고도 전략적 목표를 위해 스스로 움직이게 된다.

 

브리핑이 성공적이었는지 판가름하는 척도는 단순하다. 팀원과 지원 병력 모두 계획의 의도와 목표를 완벽히 이해했는가이다.

 

대원들이 임무를 완전히 이해했는지 확인하기 위해 각자 맡은 임무를 설명하게 하고 세부사항에 관한 질문을 해야한다.

 

브리핑에서 가장 중요한 것은 지휘 의도를 설명하는 것이다. 작전에 참여하는 모든 대원이 작전의 목적과 작전이 의도하는 결과를 이해하면 특별한 지시 없이도 스스로 알아서 판단하고 행동하게 된다.

 

상관이 제때 결정을 내리지 않거나 필요한 지원을 해 주지 않아도 그를 원망하지 말고 먼저 자신을 돌아보아야 한다. 지휘 체계의 상부를 이끌려면 특히 직속상관을 요령껏 다루는 법을 익혀야 한다. 이를 위해 상부에 상황 보고를 지속적으로 하는 것이 중요하다.

 

본사 임원에게 현장 상황을 정확히 이해시키려면 더 많은 노력이 필요하다. 더 상세하게 정보를 보고하고, 임원들과 더 긴밀하게 소통해야 한다. 임원들이 현장 상황을 정확히 이해하지 못한다고 생각되면 이곳으로 와서 직접 보라고 요청해야 한다.

 

결정을 내릴 만큼 충분한 정보가 없다는 말은 역설적으로 결정을 내릴 만큼 충분한 정보를 이미 가지고 있다는 의미로 해석할 수도 있다.

 

모든 리더는 자기 없이도 조직이 돌아가는 것을 목표로 삼아야 한다. 리더는 후배들이 언제라도 승진해 더 큰 권한을 가질 수 있도록 훈련시키고 지도하는 데 온 힘을 쏟아야 한다.

 

리더가 되었다면 겸손해져야 한다. 남을 존중해야 한다. 계급과 직책은 상관없다. 다른 사람보다 돈을 수백 배 더 벌어도 마찬가지다. 모든 사람을 존중해야 한다. 반드시 남의 말에 귀를 기울여야 한다. 남의 말을 들으면 그 사람과 당신이 연결된다. 그게 리더인 우리가 해야 하는 일이다.

 

마이크로매니지먼트는 상황에 따라 필요하다. 하지만 그것으로 시작해서 점차 지휘권 분산으로 변화해야 한다.

 

마이크로매니지먼트를 한다는 것은 리더로서 해야할 일을 못하고 있는 것이기 때문에 하고 싶지 않지만 어쩔 수 없이 해야하는 일이라는 느낌을 가져야 한다. 이후 어느정도 하면 물러나야 한다. 시시콜콜 간섭받는 것을 좋아하는 사람은 아무도 없다.

 

상사의 신임을 얻기 위해서는 상사가 원하는 것보다 더 많은 정보를 보고하면 된다.

선형대수학을 볼 때마다 느끼지만 대수적으로만 기술되어 있다보니 늘 추상적으로 느껴지고 직관적이지가 않았습니다. 이번에 국문과 공대생이라는 블로그를 운영하시는 분의 글을 보다가 명불허전이라는 분의 선형대수 강의를 수강하고보니 선형대수 이해를 이렇게 잘 알려주는 사람이 있구나 하면서 감탄했습니다. 아무래도 선형대수에서 흔히 배우는 방식인 대수적인 측면이외에도 기하적인 측면의 설명과 더불어 시각화 자료가 높은 이해도의 핵심을 차지 한 것 같습니다. 

 

늘 선형대수를 보며 그래서 대체 물리와 어떻게 연결해 설명할 수 있는 것인지 궁금했습니다. 중고등학교때 함수나 미적분을 왜 배우는지 몰랐지만 지나고나니 물리학에서 파동을 기술하거나 다른 물리량을 알아내는 데에 쓰인다는 것을 알게 되었고, 수학으로 물리학을 말할 수 있다는 사실이 흥미로워지면서 더 관심을 갖게 됐습니다. 마찬가지로 선형대수도 물리학적으로 가지는 의미를 이해하면 더 이해가 높아질 것 같아서 그런 강의가 없을까 했는데 3Blue1Brown라는 유튜버의 강의를 접하고나서 많이 해소가 된 것 같습니다.

 

링크는 https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab 입니다. 총 16강으로 구성되어 있구요 각 강의는 10분대 내외로 짧게 이루어집니다. 서두가 길어지면서 홍보글 같긴하네요. 아무튼 강추합니다. 

 

첫 강의에서부터 선형대수를 바라볼 수 있는 3가지 측면을 언급하면서 시작합니다. 물리학의 관점, 컴퓨터 과학의 관점, 수학의 관점이 있다고 이야기합니다. 선형대수에서 자주 쓰이는 벡터는 물리학의 관점에서 화살표와 동일하며, 컴퓨터과학에서는 숫자 리스트, 수학의 관점에서는 모든 것이라 이야기합니다. 관점으로는 간단히 여기까지만 이야기하고 이후로는 선형대수의 개념에 대해 설명을 진행합니다. 저는 물리 이외에도 (당연하지만) 컴퓨터과학과 수학의 관점에서 바라볼 수 있다고 언급한 것에서 넘어가서 계속 보게 된 것 같습니다.

 

기초 벡터 연산

선형대수학에서는 크게 두 가지 기본적인 연산으로 이루어집니다. 벡터 합스칼라곱입니다. 벡터는 단순합니다. 화살표라고 생각해도 됩니다. 또는 화살표의 좌표를 나타내는 것이라 생각하면 됩니다. 이후 강의를 통해 스칼라의 의미를 처음으로 제대로 이해하게 됐습니다. 

 

 

스칼라는 단순히 숫자로만 이해하고 있었으나 위와 같이 하나의 벡터(화살표)의 길이를 늘리거나 줄이거나 방향을 바꾸는 것을 Scaling이라 하는데, 위의 그림과 같이 2, 1/3, -1.8과 같이 벡터 스케일링에 사용되는 숫자들을 스칼라(scalar)라고 한다고 합니다. (스칼라의 영어발음이 스케일라였습니다.) 즉 선형대수에서 스칼라는 벡터 스케일링을 목적으로 사용됩니다.

 

벡터에 스칼라를 곱하는 것은 숫자 리스트(행렬)라는 개념에서 리스트의 각 원소에 숫자를 곱하는 것과 같습니다. 스칼라를 이용해 벡터를 스케일링할 수 있고 이렇게 스케일링된 두 벡터끼리 더하는 것을 선형결합(linear combination)이라고 합니다. 

 

기저

기저 또한 처음으로 시원하게 강의를 듣게 되어 이해할 수 있었습니다. 기저를 설명하기 위해서는 먼저 2차원 x, y 좌표계상의 특별한 두 가지 벡터가 있다고 합니다. 바로 x축에 있는 단위 벡터(unit vector)인 $\hat{i}$와 y축에 있는 단위 벡터인 $\hat{j}$입니다. 이 둘을 좌표계의 기저(basis)라고 합니다. 

 

 

그렇다고하면 이 기저는 어떤 의미를 가지는가?라고 했을 때 핵심은 벡터의 변환을 구할 수 있다는 것입니다. 조금 더 설명하면 어떤 벡터 $(x, y)$가 있을 때 어떤 행렬을 거쳐서 공간상에 $(x', y')$로 매핑된다면 그 기저는 어떤 행렬이 되는 것입니다. 즉 Input vector $(x, y)$는 기저만 알고 있다면 바로 output vector $(x', y')$를 도출해낼 수 있는 것과 같습니다. 조금 더 자세히 말해 벡터가 행렬로부터 변환이 된다면 벡터를 이루는 기저 또한 변환이 되는데 결과적으로 변환된 기저벡터를 알고 있다면 어떤 벡터 $(x, y)$가 와도 변환을 바로 시킬 수 있다는 것입니다. (보충 설명은 앞으로 작성될 선형변환 포스팅에서 참고 바랍니다)

 

이 기저라고 하는 것은 암묵적으로 원점을 기준으로 하는 것으로 사용하고 있습니다. 때문에 움직이는 것은 두 벡터만 움직입니다. 두 벡터를 가지고 어디에 활용할까요? 아래와 같이 2차원 공간상의 모든 좌표를 표현할 수 있게 됩니다. 무한하고 평평한 2차원 평면을 만들 수 있다는 것입니다. 

 

 

이렇게 두 벡터를 통해 표현할 수 있는 공간을 Span이라고 합니다. 정확히 Span의 사전적 정의는 주어진 두 벡터 쌍의 조합으로 나타낼 수 있는 output vector의 집합입니다. 2차원 벡터쌍의 span은 대부분 2차원 공간 전체가 됩니다. 

 

하지만 이러한 span이 특정 선 위로 제한이 되는 경우도 있습니다. 바로 두 벡터 중 하나가 다른 벡터와 겹치게 되는 경우 입니다.

 

 

이럴 때는 Span이 2차원 공간이 아니라 단순히 직선 하나로 볼 수 있습니다. 이렇게 하나의 벡터가 다른 벡터에 겹치게 되어 Span이 한 차원 확장되지 못하는 경우를 선형 종속(Linear Dependent)이라고 합니다. 다시 말해 벡터가 하나만 있었다면 1차원 선만 표현하지만 2개라면 2차원을 표현해야합니다. 하지만 2개의 벡터가 있음에도 불구하고 1차원 밖에 표현하지 못하는 것을 의미합니다. 

 

반대로 하나의 벡터를 추가하여 기존 Span이외에 다른 차원을 추가해주는 것이 가능하다면 선형 독립(Linear Independent)라고 합니다. 이는 3차원에서도 마찬가지입니다.

 

 

세 개의 벡터가 있을 때 스팬은 모든 가능한 선형결합의 결과집합입니다. 즉, 세 개의 벡터로 모든 3차원 공간을 다 만들 수 있는 것과 동일합니다. 하지만 2차원과 마찬가지로 예외가 존재하는데, 만약 세 번째 벡터가 두 개의 벡터가 만드는 스팬(평면)에 놓여있다면 세 번째 벡터를 추가해도 스팬이 바뀌지 않습니다. 이를 선형종속이라 하였습니다.

우분투에 아나콘다 환경을 설치하는 법에 대해 간단 정리하려 합니다. 윈도우에는 자주 설치하였으나 점점 머신러닝/딥러닝 환경을 우분투에 구축할 필요성을 느껴 기록용으로 작성합니다.

 

Anaconda를 설치하기 위한 과정은 크게 5가지 밖에 없어 간단합니다. (셸스크립트 다운, 실행, 설치경로설정, 환경변수 설정/적용, conda 자동 실행 off)

 

1. 설치 셸 스크립트 다운로드

wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh

wget을 통해 아나콘다를 설치할 수 있는 셸 스크립트를 가져와줍니다. 실행할 경우 아래와 같이 다운로드 되는 것을 확인할 수 있습니다.

 

만약 더 최신버전으로 받고 싶을 경우 아나콘다 홈페이지 https://www.anaconda.com/products/individual에 들어가줍니다. 이후 맨 아래로 스크롤을 내리면 우분투 설치가 보입니다. 

 

마우스 오른쪽을 눌러주고 URL을 복사해서 wget에 입력해주시면 됩니다.

 

2. 설치 셸 스크립트 실행

sh Anaconda3-2021.05-Linux-x86_64.sh

이후 아래와 같이 설치 진행 화면이 보이면 Enter를 입력하고 Space를 계속 눌러 줍니다.

 

 

3. 아나콘다 설치 경로 설정

다음은 설치 경로를 지정하는 것인데 Default로 사용자 계정 바로 아래에 설치하는 것이니 Enter를 쳐줍니다. 필요시 원하는 경로를 입력해주시면 됩니다.

 

 

4. 환경변수 등록 및 적용

이후 환경변수에 등록할 것을 묻습니다. yes로 입력해줍니다.

 

 

yes를 입력해주면 환경변수가 등록되었습니다. 이제 등록과는 별개로 적용을 해주어야 합니다.

source ~/.bashrc 명령을 통해 적용해줍니다.

 

 

5. conda 자동실행 off

conda config --set auto_activate_base false

단순히 환경변수 적용만하고 나면 앞으로 자동으로 conda의 base라는 이름의 환경이 켜집니다. 따라서 우리가 원할때만 활성화 할 수 있도록 자동 활성화를 꺼줍니다.

 

 

아나콘다 설치가 완료되었습니다.

 

 

Reference

[1] https://thinmug.tistory.com/51

자연어처리 프로젝트 진행 도중 우분투에 딥러닝 학습 환경을 만들 필요성이 생겼고 설치 과정을 정리하여 이후에 참고하고자합니다. 먼저 우분투에 딥러닝 환경 설치하는 방법에 대해서는 https://webnautes.tistory.com/1428에서 참조하였습니다. 참조한 블로그의 포스팅과 차이점은 핵심만 추려 간소화한 것입니다.

 

딥러닝 환경을 구성하기 위해서는 크게 3가지가 필요하다.

 

1. NVIDIA 드라이버

2. CUDA

3. cuDNN

 

이를 위해 아래의 명령어를 순차적으로 실행하면 된다.

 

우분투 최신 환경 유지

sudo apt-get update

sudo apt-get upgrade

 

현재 사용중인 그래픽카드에 설치할 수 있는 드라이버 목록 확인

ubuntu-drivers devices

 

* 만약 ubuntu: command not found 에러가 발생한다면 아래와 같이 관련 패키지 설치를 우선하면 된다.

sudo apt-get install -y ubuntu-drivers-common

 

 

결과로 확인된 driver 중 하나를 설치하며, 가급적 recommended라 표시된 것을 설치한다. 설치 이후 적용을 위해서 재부팅이 필요함.

 

만약 명령어의 결과값이 위 처럼 나오지 않고 출력값이 없을 경우 그래픽카드가 올바르게 연결되어 있지 않은 것이므로 연결을 잘 확인해야 함.

 

NVIDIA 드라이버 설치

sudo apt-get install nvidia-driver-470

nvidia-smi

 

Driver Version으로부터 설치한 드라이버 버전인 470을 확인할 수 있음

 

https://developer.nvidia.com/cuda-toolkit-archive에 접속해서 CUDA Toolkit 11.4.2를 클릭. 이후 아래와 같이 Linux, x64_64, Ubuntu, 20.04, deb(local)를 선택. (각자 환경에 적합한 것으로 선택)

 

선택 이후 아래의 명령을 확인할 수 있고 터미널에 아래의 명령어를 입력

 

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.4.2/local_installers/cuda-repo-ubuntu2004-11-4-local_11.4.2-470.57.02-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-4-local_11.4.2-470.57.02-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu2004-11-4-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

(낮은 버전에서는 위 그림보다 더 간소화된 설치 command를 제공한다. 그 때 설치 에러가 발생한다면 sudo apt-get install gcc를 통해서 gcc를 설치하면 된다)

 

CUDA Toolkit 관련 설정을 환경 변수에 추가 후 적용

sudo sh -c "echo 'export PATH=$PATH:/usr/local/cuda-11.4/bin' >> /etc/profile"

sudo sh -c "echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.4/lib64' >> /etc/profile"

sudo sh -c "echo 'export CUDADIR=/usr/local/cuda-11.4' >> /etc/profile"

source /etc/profile

 

버전이 다르다면 위 명령어에서 11.4 말고 설치한 버전만 바꾸어 입력하면 된다.

 

cuDNN 다운로드

https://developer.nvidia.com/cudnn 에 접속하여 Download cuDNN 클릭 후 로그인. 이후 Download cuDNN v8.2.4 ~ for CUDA 11.4를 선택하여 다운로드

 

cuDNN 파일 압축해제 및 파일 복사

cd Downloads

tar -xvzf cudnn-11.4-linux-x64-v8.2.4.15.tgz

sudo cp cuda/include/cudnn* /usr/local/cuda/include

sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64

sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

 

 

cuDNN 파일 심볼릭 링크 설정

sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.1.0 /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_adv_train.so.8

sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.1.0  /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8

sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.1.0  /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8

sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.1.0  /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8

sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.1.0  /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_ops_train.so.8

sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.1.0 /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8

sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn.so.8.1.0  /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn.so.8

 

마찬가지로 버전이 다르다면 11.4를 설치한 버전으로 바꾸면 된다.

 

새로 추가된 라이브러리를 시스템에서 찾을 수 있도록 함

sudo ldconfig

 

 

루트 디렉터리로 이동

cd

 

 

링크 설정이 정확하게 되었는지 확인

ldconfig -N -v \$(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep libcudnn

위와 같이 8.2.4가 보여야 함.

 

여기까지하면 딥러닝 환경 설치에 필요한 NVIDIA 드라이버, CUDA Toolkit, cuDNN 설치를 완료한 것임.

 

실제로 GPU가 학습에 사용될 수 있는지 여부를 확인하기 위해서는 추가적으로 텐서플로우를 설치.

 

pip3 install tensorflow

이후 위의 tf.config.list_physical_devices("GPU")를 통해 successful이 보인다면 정상적으로 학습에 사용할 수 있음. 끝.

 

 

설치 자체는 위 명령어들만 입력해주면 간단하게 설치되어서 문제 없었음. 하지만 도중에 그래픽 카드 낮은 성능인거 확인하고 다른 그래픽카드로 갈아끼우는데 애먹어서 힘들었음. 그래픽 카드 장착 해제하기 위해서 멈치 찾고 누르는게 어찌나 어렵던지... 갈아끼우고 나서 ubuntu-drivers devices 명령어 입력 했을 때 결과가 출력되지 않아서 당황도 했음. PCI 선을 꼽지 않아서 그래픽 카드에 연결이 되지 않았던 것임. 그래서 연결하려고 PCI 선 하나 꼽았다가 비프음 4번 나는거 듣고 파워 부족이라는거 보고 PCI 선 다 넣어주고 켰더니 이번엔 비프음 5번 또 발생함. 그래픽카드와 모니터가 연결안되어서 발생하는 문제였음. 그래서 올드한 VGA 케이블에서 HDMI로 바꾸니까 됐음. 연구실 사람들 도움 받아서 하긴했는데 멈치가 망가짐 아닌 망가지긴 했음. 무튼 다음에는 삽질을 좀 덜할 수 있을 것으로 보임

 

 

Reference

[1] https://webnautes.tistory.com/1428

스토캐스틱 개념과 특징

가격 등락의 중심으로 가격이 회귀하려는 성질을 의미한다. 아래의 그림에서보면 지지선인 1000원과 저항선인 2000원의 채널 사이에 있는 1500원으로 회귀하려는 성질이 스토캐스틱이라 할 수 있다.

위 그림을 보면 직관적으로 1000원에 사서 2000원에 팔면 되는 것으로 보인다. 하지만 실제로는 가격의 최고점과 최저점을 예측하기 어렵기 때문에 상승확률이 높은 1500원 이하에서 매수하고 하락 확률이 높은 1500원 이상에서 매도하는 전략을 짜면 더 빈번한 수익을 얻을 수 있다.

 

스토캐스틱 구성

크게 %K, %D라는 2가지 요소로 구성된다.

%K

어렵지 않다. 1000원과 2000원 사이를 파동으로 볼 수 있다. %K는 쉽게 말해 현재 가격이 파동의 몇 퍼센트의 위치에 와있느냐는 것이다. 1000원을 파동의 시작으로보면 1200원은 파동시작의 20%지점에 있다 볼 수 있다. 따라서 %K = 20%이다. 일반적으로 %K가 20% 이하면 침체고 80% 이상이면 과열로 분석한다.

%D

한 마디로 그냥 이동평균선이 아니라 %K의 이동평균선이다.

Slow %D 5는 %K의 5일 이동평균선이라는 것이다.

이동평균선을 알고 있다면, %K가 %D로부터 수렴과 발산 계속 할 것이라는 알 수 있다. 수렴과 발산이 이루어지다보면 %K와 %D 사이에서 골든크로스와 데드크로스가 나오게 된다.

 

스토캐스틱의 종류

스토캐스틱은 크게 2가지 종류인 Stochastic fast, Stochastic slow가 있다. 차이점은 Stochastic fast는 5일간의 가격 변동(%K 5)과 %K의 3일 이평선으로 이루어진(%D 3)차트이다. 하지만 fast의 경우 가격변동에 민감하다. 때문에 이를 보완하고자 Stochastic slow를 사용한다.

 

Stochastic slow는 12일간의 가격 평균인 %K 12를 사용하고, %K의 이동평균선은 5일 평균으로 사용한다. 때문에 fast에 비해 더 완만한 곡선을 보여주는 것이 특징이다.

 

스토캐스틱 사용법

이더리움 1일 봉

스토캐스틱을 활용한 매매법은 빨간지점에서 사고 파란지점에서 팔면된다. 빨간지점은 12일간의 가격 평균보다 5일간의 이동평균선이 더 내려 왔기 때문에 상승(회귀)할 것이라 예측할 수 있다. 반면 파란지점은 12일간의 가격 평균이 5일간의 이동평균선보다 더 높기 때문에 하락(회귀)할 것이라 예측할 수 있다.

 

스토캐스틱에서는 과열은 80, 침체는 20을 기준으로 한다. 따라서 %K가 과열되면 매도, %K가 침체되면 매수하는 전략을 취한다.

 

또한 스토캐스틱은 골든크로스와 데드크로스를 활용한 매매전략을 취할 수 있다. 아래와 같이 5일 이동평균선이 12일간의 가격 평균보다 낮았다가 변화하려는 시점에 매수하고, 5일 이동평균선이 12일간의 가격 평균보다 높다가 변화하는 시점에 매도하는 것이다.

 

하지만 이런 스토캐스틱을 활용한 매매법이 수익률 측면에서 유리하다 볼 수 없다. 단순히 추세 전환의 시작점을 찾을 때 유용하고, 매매 선택지를 줄여주는 효과가 있다. 주로 횡보장이나 추세가 없는 박스권에서 적중률이 높은 편이다.

 

스토캐스틱을 통해 아래의 항목에 활용 가능하다.

  • 다이버전스를 이용한 추세전환 분석
  • 과매수/과매도 판단
  • %K/%d 선의 교차 지점을 통해 진입 시점 판단

 

 

Reference

[1] https://monstock.tistory.com/173

[2] https://monstock.tistory.com/174?category=862767

[3] https://m.blog.naver.com/whtjdcks0414/221418132334

삼각수렴 개념

삼각수렴은 코인이나 주식 차트에서 볼 수 있는 하나의 캔들패턴으로 지지선과 저항선을 그었을 때 삼각형으로 수렴하는 패턴의 차트를 말한다.

 

삼각수렴 생성 배경

가격이 어느 지점에 도달할 때 매도세와 매수세의 균형이 이루어지는 지점에서 생긴다. 엘리엇 파동이론에 따르면 삼각수렴은 마지막 파동의 이전 파동과 복합조정의 마지막파동에서 나온다고 설명되어 있다. 마지막 파동의 이전 파동이란 5파 이전인 4파 횡보조정이나 C파 이전인 B파 횡보조정을 의미한다. 복합조정의 마지막 파동이란 WXY의 Y 또는 WXYXZ의 Z파동을 의미한다. 엘리엇 파동이론에서는 4파에서 삼각수렴할 경우 5파동이 추진파동으로 삼각수렴 입구 크기만큼 나오며, 이 추진파동의 예측범위를 벗어날 경우 5파동이 연장된다고 한다.

 

삼각수렴 종류

삼각수렴의 종류는 크게 3가지가 있다. 상승 삼각수렴, 하강 삼각수렴, 대칭 삼각수렴이다. 어센딩 트라이앵글, 디센딩 트라이앵글, 시메티컬 트라이앵글이라고도 한다.

 

 

각 삼각수렴 별 특징

상승 삼각수렴

일반적으로 상승방향으로 가격이 향한다. 이유는 저점이 높아지기 때문인데, 이는 하단에서 매수세가 들어오고 있다는 의미이기 때문이다. 즉, 상승 삼각수렴 패턴은 고점은 일정한 가격대를 유지하지만, 저점은 높아지는 패턴이라 할 수 있다. 다른 용어로 짝궁댕이, 쌍바닥, W패턴, 하이힐 패턴이라고도 한다.

 

하강 삼각수렴

일반적으로 하락방향으로 가격이 향한다. 저점 추세선은 일직선을 유지하고 고점 추세선이 하락하는 패턴이다. 

 

대칭 삼각수렴

방향성이 정해져 있지 않다. 대칭 삼각수렴은 매도 세력과 매수 세력이 비슷한 힘을 가지고 수렴되는 패턴이다. 수렴되었을 때 더 강한 힘 방향으로 주가가 움직인다.

 

삼각수렴의 특징

삼각수렴의 경우 두드러진 특징이 가격이 수렴하면서 거래량또한 감소한다는 것이다. 줄어든 거래량은 방향성을 가지고 삼각수렴의 한 변을 돌파할 때 폭발적으로 증가하게 되며 이는 추세가 진행되는 것을 의미한다. 

만약 삼각수렴 이후 추세선 돌파시 눈에 띄는 거래량이 발생하지 않을 경우 아래와 같이 삼각수렴 패턴이 아니라 휩쏘일 가능성도 있다. 따라서 삼각수렴 이후 추세선 돌파시 눈에 띄는 거래량이 있는지 확인하고 매수/매도를 해야한다.

또 다른 삼각 수렴 패턴의 특징으로는 차트 상 가장 많이 발생된다는 것이다. 삼각 수렴은 일봉이나 주봉보다 간격이 짧은 1시간 이내의 차트에서 주로 발견된다. 때문에 단타 트레이더가 사용하기에 적합하다. 하지만 일반적으로 초보자들이 많이 하는 실수 중 하나가 분봉 패턴에서 삼각수렴의 패턴을 보고 이탈시 매수/매도 전략을 사용하기도 한다. 하지만 이는 사실 썩 좋지 않은 방법에 속한다. 분봉패턴의 삼각수렴은 정확하지 않음이 그 이유이며, 옳다고 하여도 스캘핑식 접근을 해야하기에 큰 수익을 기대하기 어렵기 때문이다.

 

삼각수렴의 경우 통상적으로 3개의 고점과 3개의 저점이 나타나는 것이 특징이며 그 이상 나타날 경우 패턴의 완성도가 높다고 판단할 수 있다. 추세선을 돌파할 경우 삼각수렴 패턴의 최초 상승/하락 폭이므로 패턴의 시작점을 정확히 파악하는 것이 중요하다.

 

 

삼각수렴 판단 방법

삼각수렴에 진입할 경우 입구의 볼륨이 가장 크고 입구부터 해서 점점 거래량이 줄어드는 양상을 띤다. 때문에 거래량을 보는 트레이더들은 거래량 감소를 보고 수렴 진입여부를 판단한다.

 

 

삼각수렴 대응 방법

1. 공격적 매매방법

엘리엇 파동 ABCD 파동까지 단타 후 E 파동을 기다리며 파동이 나온 이후 여러 시그널에 따라 진입 후 손절은 반대쪽 변으로 잡는 방법이다. 하지만 리스크가 다소 크기 때문에 손절라인을 잡을 것을 권한다.

 

2. 보수적 매매방법

엘리엇 파동 ABCDE 파동까지 나온 후 거래량과 함께 삼각수렴을 돌파하는 흐름이 나올 경우 진행 방향에 따라 매매하는 방법이다. 추세추종 매매이기에 손절위험이 적으나 진입가격 측면에서 불리한 것이 특징이다.

 

3. flag-based 매매방법

flag-based라는 용어는 임의로 만든 것으로, 상승 깃발형과 하락 깃발형을 기준으로 거래량을 동반해서 돌파하는 방향으로 매매하는 방법이다.

 

위의 1, 2, 3번 매매 법의 공통적인 주의점은 이평선이나 스토캐스틱 등의 시그널이 돌파방향과 일치하는지 확인해야 한다.

 

4. 비매매

매매 기회는 수 없이 많으므로 차트에 대한 이해가 없을 경우 매매를 지양할 것.

 

 

Reference

[1] http://wiki.hash.kr/index.php/삼각수렴

[2] https://tailong.tistory.com/375

[3] https://m.blog.naver.com/kkumchartist/222261897266

[4] https://kiwoom-wang.tistory.com/743

[5] https://tradingwong.tistory.com/90

알고리즘 그룹을 만드려고 하니 50문제를 풀어야만 만들 수 있다고 한다. 하필 49문제였다. 급하게 쉬운 문제 찾아본다고 풀어본 것이다.

 

문제

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다. 두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

 

예시 입력

734 893

 

예시 출력

437

 

알고리즘

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main(void)
{
	string a, b;
	cin >> a >> b;
	if (a.size() == 3 and b.size() == 3)
	{
		reverse(a.begin(), a.end());
		reverse(b.begin(), b.end());
		if (a > b)
			cout << a;
		else
			cout << b;
	}
	return 0;
}

숫자를 int 형으로 받지 않고 string으로 받았다. 문자의 길이를 확인할 수 있는 size() 함수를 사용하기 위해서.

 

이후 문자열을 뒤집는 reverse 함수를 사용하여 문자열을 플립하였다. reverse 함수는 #include <alogrithm>를 선언하여 사용할 수 있다. 

 

특이사항은 숫자 비교를 위해서 int 형으로 바꾸어야 할 것이라 생각했는데 그러지 않아도 동작함.

멱급수 (Power Series)

멱급수 이전에, 먼저 급수란 규칙이 있는 수열의 합을 의미한다.

예컨데 등차수열의 합이나 등비수열의 합도 급수이다. 등비수열의 합을 나타내는 식은 아래와 같은데, 

 

$S_n = a + ar + ar^2 + ar^3 + \dots + ar^{n-1}$

 

위와 같은 일반적인 급수는 각 항에 단순한 숫자가 들어가는 것이 특징이다. 하지만 멱급수의 경우 같은 형태를 띠지만 숫자가 아닌 $x$와 같은 문자로 표현되는 것이 특징이다. 가령 수식으로 나타내면 아래와 같다.

 

$f(x) = a_0 + a_1x + a_2x^2 + a_3x^3 + \dots = \sum_{n=0}^\infty a_nx^n$

 

이러한 멱급수는 언제 사용될까? 멱급수는 물리학이나 수학에서 처음부터 정확한 해를 찾기 어려울 때 근사치를 통해 점점 근사한 값을 찾아갈 때 사용한다. 즉, 찾고자 하는 함수나 해가 어떤 형태나 값인지 잘 모를 경우 멱급수로 가정하고 문제를 풀게 되면 근사 함수나 근사 해를 구할 수 있는 것이 특징이다. 이 때 정확한 함수나 정확한 해를 구할 수 없는 것은 실사용의 편의를 위해 고차원이 되는 항은 제외하고 2차항 또는 3, 4차항만 구한 뒤, 이를 구하고자 했던 함수 또는 해라고 판단한다. 실제로 멱급수는 양자역학에서 원자핵 주위를 도는 전자와 같이 미시세계를 다룰 때 2차항 정도까지만 고려해도 계산값과 측정값이 근사하기 때문에 유용하게 쓰인다고 한다. 

 

테일러 급수 (Taylor Series)

테일러 급수란 여러 번 미분가능한 함수 $f(x)$에 대해 $x=a$에서 그 $f(x)$에 접하는 멱급수로 표현하는 방법이다. 테일러 급수를 사용하는 방법은 무한개의 항을 가진 멱급수를 통해 어떤 함수를 표현하는 것이다. 하지만 실 사용에서는 편의를 위해 몇 개의 항만 사용해 근사의 형태로 활용한다.

 

테일러 급수를 활용한 근사 함수 추정

 

일반화한 수식으로 나타내면 다음과 같다.

$f(x) = \sum_{n=0}^\infty {f^{(n)}(a) \over n!} {(x-a)}^n$

 

테일러 급수의 특징은 $x$가 $a$ 근처에서만 성립하는 것이다. 만약 $x$가 $a$로부터 멀어지면 멀어질수록 큰 오차를 갖게 된다. 또한 테일러 급수를 활용해서 무한히 미분가능한 f(x)를 우리가 찾고자 하는 함수에 무한히 근사한다고 해도 같아지지 않을 수 있다. 예컨데 아래와 같이 항의 개수(N)가 많아질수록 오히려 근사 함수에 수렴하는 것이 아니라 어느 특정 구간에서 오차가 크게 생기는 것을 확인할 수 있다.

 

 

우리는 찾고자 하는 함수에 근사하기 위해서는 테일러 급수 f(x)에서 $x=a$인 $f(a)$가 필요하다. 

 

(1) $f(x) = a_0 + a_1(x-a) + a_2(x-a)^2 + a_3(x-a)^3 + a_4(x-a)^4 + \dots$

의 수식이 있을 때 (0)과 같이 일반화한 수식으로 나타내기 위해서는 미분한 식에 $x=a$를 대입하면 된다. 과정은 아래와 같다.

 

(1)의 식을 한 번 미분하게 되면 아래와 같은 함수를 얻을 수 있다. 

$f'(x) = a_1 + 2a_2(x-a) + 3a_3(x-a)^2 + 4a_4(x-a)^3 + \dots$

위의 식에 $x=a$를 대입하게 되면 모두 사라지고 하나의 항만 남아 $f'(a) = a_1$이 된다.

 

(1)의 식에 두 번 미분하게 되면 아래의 식이 된다

$f''(x) = 2a_2 + 2 * 3a(x-a) + 3*4a_4(x-a)^2+\dots$

위의 식에 $x=a$를 대입하게 되면 모두 사라지고 하나의 항만 남아 $f''(a) = 2a_2$이 된다. 즉, $a_2 = {1\over2} f''(a)$이다

 

(1)의 식에 세 번 미분하게 되면 아래의 식이 된다.

$f'''(x) = 2 * 3a_3 + 2*3*4a_4(x-a)+\dots$

위의 식에 $x=a$를 대입하게 되면 모두 사라지고 하나의 항만 남아 $f'''(a) = 2*3a_3$이 된다. 즉, $a_3 = {1\over{2*3}} f'''(a)$이다.

 

위와 같은 절차를 정리해서 테일러 급수를 표현하면 아래와 같다.

$f(x) = f(a) + {1\over 1!}f'_{(a)}(x-a) + {1\over 2!}f''_{(a)}(x-a)^2 + {1\over 3!}f'''_{(a)}(x-a)^3 + \dots + {1\over n!}f^n_{(a)}(x-a)^n$

 

결론을 정리하면 어떤 함수에 근사하는 함수를 찾기 위해 어떤 함수를 테일러 급수의 형태로 나타낸 다음, 미분을 통해서 찾고자 하는 함수에 점점 근사해 나갈 때 사용된다. 

 

 

매클로린 급수 (Maclaurin's Series)

매클로린 급수는 테일러 급수에 포함되는 개념이라 볼 수 있다. 테일러 급수의 특정한 경우에 사용되는 급수이다. 매클로린 급수는 $a=0$일 때를 의미하는 원점 근처에서 함수를 급수 전개 한것을 의미한다. 테일러 급수에서 사용되는 $x-a$를 $x$로만 바꾸면 되기에 더 간단한 형태이다. 

 

$f(x) = \sum_{n=0}^\infty {f^{(n)} \over n!} {x}^n$

 

Reference

[1] http://www.aistudy.com/math/optimization.htm

[2] https://nacture.kr/70

[3] https://crush-on-study.tistory.com/93

 

세계에는 다양한 종교가 있지만 그 중에서도 세계 4대 종교라 불리는, 기독교, 힌두교, 이슬람, 불교가 있다. 각 종교에는 성인(成人)으로 불리는 사람들이 있다. 성인들은 육체와 정신의 수양을 통해 깨달음을 얻고 인류에게 설파하였다. 하지만 흥미로운 것은 모두가 다른 말을 하는 것이 아니라는 것이다. 종교에서 말하고자 하는 것은 같다. 서로가 다르다고 생각하는 사람들로 하여금 분리된 개체가 아닌 하나임을 알리고, 인류가 더 올바른 방향으로 나아갈 수 있도록 하는 것이다. 때문에 서로를 사랑해야하고, 용서하고, 자비를 베풀며, 관심을 가지고, 타인을 나와 같이 대하고와 같은 가치가 강조되는 것이다. 이러한 세계 4대 종교 중 불교에 대해서 정리를 해보려고 한다. 불교에서는 누구의 마음속에나 엄청난 가치의 보물이 있다고 한다. 다만 대부분의 사람들이 마음속에 감추어진 보물을 모를 뿐이다. 그 보물은 진리라는 것으로 선천적으로 가지고 있으며, 일반적인 논리나 이성적인 사유로 도달할 수 없다는 특징을 가진다. 기독교의 성령과 같고, 힌두교의 아트만과 같으며 도교의 도와도 같다.

1. 사성제(四聖諦) 팔정도(八正道)


부처(고타마 싯다르타)의 가르침이자 불교의 시작은 사성제(四聖諦)로부터 시작한다. 사성제는 4가지 성스러운 진리를 의미한다. 사성제의 구성요소는 고성제(苦聖諦)·집성제(聖諦)·멸성제(滅聖諦)·도성제(道聖諦)이며, 이를 줄여서 고(苦)·집(集)·멸(滅)·도(道)라고 한다. 부처는 왕실에서 박차고 나와 모든 것을 버리고 수행의 길을 걸은 것으로 유명하다. 고(苦)란 부처가 꿰뚫어본 우리 삶이다. 즉, 우리 삶은 고통이라는 것이다. 우리 삶은 고통을 전제로 한다는 것이다. 그렇다면 왜 고통인가?라고 할 때 집(集) 때문이라는 것이다. 우리의 집착과 욕망 때문에 우리 마음에 고통이 일어난다는 것이다. 때문에 이 고통을 멸(滅)할 수 있는 방법은 도(道)에 이르는 길이라고 말한다. 이것이 불교의 시작이다. 우리의 고통은 집착으로부터 일어나고 이를 멸할 수 있는 방법은 도에 이르는 것이다.

그렇다면 도에 이르는 방법은 무엇인가? 부처는 이를 팔정도(八正道)라고 하였다. 팔정도는 8가지로 구성된 것으로 이를 따르며 살아간다면 부처와 같은 삶을 살 수 있다는 것이다. 8가지는 다음과 같다.

정견(正見): 쉽게 말해 사물을 있는 그대로 보는 것을 의미한다. 구체적으로는 고(苦)란 무엇이고 고의 소멸에 이르는 길을 아는 것이다.
정사유(正思惟): 정견을 바탕으로, 사물의 도리를 바르게 생각하는 것을 의미한다. 감각욕망에서 벗어나려는 생각이며 취착 없는 생각이다.
정어(正語): 올바른 말을 하는 것을 의미한다. 거짓말과 중상모략, 이간질 불필요한 말을 하지 않는 것이다.
정업(正業): 올바른 행동을 하는 것을 의미한다. 살생이나 도둑질을 하지 않는 것이다.
정명(正): 올바르고 깨끗한 생활을 의미한다. 다른 생명 또는 사람을 해치거나 착취하는 삶을 버리고 나와 남을 이롭게 하는 수단으로 생계를 유지하는 것이다.
정정진(正精進): 선하고 건전한 마음 상태를 일으키거나/나도록 하는 것이다. 이는 사띠(sati)를 확립하는 사마타(samatha) 수행을 의미한다.
정념(正念): 오온에 해당하는 색(色) · 수(受) · 상(想) · 행(行) · 식(識)의 사념처에서 일어나고 사라지는 느낌, 생각들을 바르게 통찰하는 위빠사나 수행을 말한다.
정정(正定): 정신을 집중해서 명상함으로써 마음을 평안케 하는 것을 의미한다. 구체적으로는 정념의 깊은 선정으로부터 이욕(離欲), 출리(出離) 하는 것이다. 이를 통해 연기의 현현을 경험할 수 있고 결과적으로 해탈했다는 앎이 생겨난다. 이후 더 이상 어떤 무명습성도 일어나지 않음을 스스로 분명하게 알고 볼 수 있게 된다.

2. 삼학(三學): 계학(), 정학(), 혜학(慧學)


위의 각 항목들은 정확히는 <상윳따니까야>의 분별의 경에서 팔정도를 표준으로 택했다. 위의 8정도를 다시 계정혜라는 삼학으로 분류할 수 있다.

계학: 정어, 정업, 정명
정학: 정정진, 정념, 정정
혜학: 정견, 정사유

이 삼학이라는 것은 일종의 기독교의 삼위일체 사상인 성부, 성좌, 성령으로 나눈 것과 맥락을 같이 한다 볼 수 있다.
삼학은 깨달음을 구하는 마음의 구조를 셋으로 나눈 것을 뜻한다. 생각을 통해 내린 결정을 지키겠다는 의지를 계로, 마음의 감정적인 측면을 정으로, 올바른 지식적인 측면을 혜로 구분한다. 계학은 몸과 언행과 생각으로 짓는 악행을 선업으로 신철하도록 하는 덕목이고, 정학은 마음을 고요하고 평안히 하여 깊은 정신집중 상태인 선정에 들도록 하는 덕목이며, 혜학은 평정된 마음에서 분별심을 없애고 사성제 등의 진리를 그대로 보게 하는 수행덕목이다. 이 세가지 항목은 상호보완적으로 작용하기 때문에 칼로 무 자르듯 엄격히 나눌 수 없다는 특징을 가진다. 불교에는 이밖에더 더 세분화되고 다양한 수행체계가 있지만 이 수행들은 모두 계정혜 삼학에 포함된다.


삼학에 포함되는 팔정도는 개인적 인격을 수행을 중점으로 진행한다. 이러한 삼학은 불교도들이 행하는 신앙생활의 지침이라 할 수 있다. 굳이 불교를 구분하자면 소승불교와 대승불교로 나눌 수 있다. 소승불교는 자기의 몸과 인격을 닦는데 집중한 것이라면 대승불교는 나와 더불어 타인 또한 깨달음을 얻을 수 있도록 하자는 것이다. 대승불교는 지옥에 있는 자라도 끌어 올리자는 마음가짐이라 볼 수 있다. 삼학이라는 것은 소승불교에서 사용되던 개념이고 삼학이 발전하여 대승불교에서는 육바라밀(六波羅蜜)이 되었다. 육바라밀은 보살의 여섯가지 수행덕목을 의미하는 불교교리로, 구성요소로는 보시·지계·인욕·정진·선정·반야바라밀이 있다. 자기 인격완성을 위해서는 사성제와 팔정도로 충분하지만 대승불교에서는 팔정도가 자기완성을 위한 항목만을 포함하고 있기 때문에 이타(利他)를 위해서는 충분하지 않다고 생각하여 육바라밀이라는 독자적인 수행법을 알린 것이 특징이다.


3. 불교의 기원과 발전사


불교의 시대를 크게 4가지로 나누면 초기불교, 아비달마불교, 대승불교, 밀교로 나눌 수 있다. 고타마 싯다르타(부처)가 깨달음을 얻고 이에 대해 설파를 하기 시작할 때를 초기불교라고 한다. 초기불교는 부처가 입멸후 100년까지를 의미하는 것으로 근본 불교 또는 원시 불교라고도 불렸다. 초기불교이후 아비달마 불교로 이어졌다.

3.1 아비달마 불교

아비달마 불교는 법(法)에 관한 연구를 한 것이 특징이다. 법이란 부처가 설한 교법에 대한 연구와 해석을 말한다. 아비달마 불교의 목표는 열반을 증득하여 번뇌 없는 아라한을 추구한다는 것이다. 아비달마 불교는 소승불교라고도 불린다. 참고로 소승불교는 작은 수레를 의미한다. 아비달마 불교는 크게 상좌부와 대중부로 나뉘었다. 상좌부는 교리를 해석하는 데 있어 보수적으로 해석을 했으며, 대중부는 교리해석을 진보적으로 하였다. 상좌부는 장로를 중심으로 이루어졌고, 대중부는 젊은 비구들을 중심으로 이루어진 것이 특징이다. 아비달마에서 의미하는 달마(dharma)는 법(法)과 동일하며, 힌두교에서 의미하는 달마와 동일하다. 즉 세상이 돌아가는 이치, 우주가 숨을 쉬는 이치라는 것이다. 달마를 이루는 구성요소는 크게 두 가지로, 물질과 마음으로 이루어졌다 하였다. 다시 말해 세상은 이 두가지로 구성되어 있다고 이해한 것이 아비달마 불교라고 할 수 있다. (이러한 달마(법)이라는 하나로부터 구성요소인 물질로부터 철학의 존재론과, 마음으로부터 철학의 인식론이 나뉘어지게 되었다.)

3.2 대승불교

아비달마 불교에서 발전한 것이 대승불교이다. 대승의 의미는 큰 수레를 의미하는 것으로 모든 사람이 다 함께 깨달음을 구한다는 것이다. 일론 머스크가 이야기한 인류의 집단적 깨달음과 동일한 의미이다. 대승불교는 크게 초기 대승불교와 후기 대승불교로 나뉘는데 핵심은 나가르주나(용수)라고 불리는 대승불교를 창시한 사람의 존재 전후로 나뉜다. 대승불교는 경전과 논서가 조금 더 과학적 접근이 쉽도록 정리했다는 것이 특징이다. 대승불교는 소승불교인 아비달마 불교와 달리 육바라밀을 강조했다는 것이 특징이다. 하지만 단점으로는 소승불교에서 가르치던 팔정도에서 정념(sati)가 누락되었다는 것이다. 불교가 다른 종교의 수행체제와 특별히 다른 점이 정념이었다. 이 정념은 지금의 말로 마음챙김으로 번역되어 사용되는 말이다. 정념한다는 것은 명상 수행을 한다는 것과 같다.

대승불교에서는 여러 사상이 정립된 것이 특징이다. 크게는 5가지로 보살 사상, 다불 사상, 공 사상, 중도 사상, 중관 사상이 있다. 보살 사상은 천국과 극락에 만족하지 말고 지옥으로부터 중생을 구하자는 것이다. 다불사상은 불교에 있어서 가장 중심이 되는 부처인 고타마 싯다르타 이외에도 다양한 시간과 수많은 공간을 초월하여 모든 곳에 부처가 존재한다는 사상이다. 공 사상은 인간이 영원한 행복을 얻을 수 있는 원리와 근거를 마련해준다는 면에서 영원한 행복을 찾는 사람이라면 꼭 알아야할 사상이라고 한다. 중도 사상은 양극단에 치우치지 않는 것을 의미한다.

중도 사상은 조금 더 중요하여 짚고 넘어가야 한다. 중도사상은 초기불교부터 대승불교까지 관통하는 사상으로 불교의 모든 이론과 실천적 수행은 중도사상을 근본으로 하고 있다. 중도사상의 기본적인 형태는 즐거움과 괴로움, 있음과 없음, 생과 멸 등과 같은 양 극단에 집착하지 않고 초월하는 것을 의미한다. 예를 들면 물과 파도는 둘이 아니라는 것이다. 본질적인 측면인 공과 현상적인 측면이 서로 다르지 않다는 것이다. 에너지가 흐름으로써 상대적으로 고기압과 저기압이 생기는 것이지 본질적으로는 고기압과 저기압은 에너지의 흐름 단 하나라는 것이다. 나라는 존재가 있기 너라는 존재가 성립하는 것이다. 반대도 마찬가지다. 타인이 있기 때문에 나라는 존재가 성립할 수 있는 것이다. 우리는 우리 자체로 존재할 수 없다. 나와 타인이, 고기압과 저기압이, 이 모든 것이 연기(상호작용)함으로써 의미를 가지고 존재할 수 있는 것이다. 우주는 이렇듯 삼라만상이 모두 연기함으로써 운행된다고 보는 것이 불교이다. 초기불교의 근본 가르침인 사성제와 팔정도 또한 이러한 중도 사상에 입각한 수행방법이다. 이 중도를 전부 담은 것이 연기론(緣起論)이다. 연기론을 더욱이 알기 위해서는 <인식이란 무엇인가>를 읽어볼 것을 권한다. (시중에 판매되는 불교서적 중 연기론에 대해 잘 정리되어 있고 나아가 철학, 생물학, 물리학, 뇌과학 측면 일부도 함께 다룬다는 점에서 좋은 책이다.)

중관사상은 대승불교의 기본철학을 확립했다 할 수 있다. 공사상과 중도 사상에 입각하여 만들었고, 이 중관사상의 확립자는 대승불교의 창시자인 나가르주나(용수)이다. 제2의 부처라 불리는 사람이다.

대승불교에서는 여러 유명한 대승경전들을 만들었다. 종류로는 반야심경, 법화경, 십지경, 화엄경, 유마경 등이 있다. 하지만 가장 중요하고 가장 근원이 되는 경전은 화엄경이다. 이 화엄경은 연기론의 극치를 담았다 할 수 있다. 모든 불교 경전들은 화엄경을 기반으로 파생된 것들이다. 때문에 화엄경을 해석하는 것에 두고 종파가 갈린다. 올바른 부처의 가르침을 얻기 위해서는 뿌리가 되는 화엄경을 먼저 읽고, 각 종파를 비교하여 차이점을 알아 볼 것을 권한다.

대승불교에서는 일체유심조를 말한다. 마음이 세상을 만든다는 것이다. 또 대승불교에서 사용되는 개념 중 하나는 십팔계(十八界)가 있다. 십팔계는 크게 3가지로 육식(六識), 육근(六根), 육경(六境)으로 구성된다. 육근과 육경은 십이처(十二處)라고 한다. 여기서의 처(處)는 인식을 낳게 하는 문을 의미한다. 물질이든 정신이든 이 세상 삼라만상이 모두 십이처에 포섭된다고 한다. 다르게는 오온(五蘊)이라고도 한다. 육식은 우리의 6가지 인식기관(감각기관)을 의미하는 것으로 안식, 이식, 비식, 설식, 신식, 의식이 있다. 눈, 귀, 코, 혀, 몸, 의식이라 할 수 있다. 의식을 제외한 나머지를 전오식(前五識)이라 부르며, 의식은 육식이라 부른다. 감각기관인 안이비설식의와 함께 감각대상인 색성향미촉법이 서로 부딪히면 번뇌가 일어나게 된다. 즉 6가지 감각기관과 6가지 감각대상이 합쳐서 36 번뇌를 일으키는 것이다. 즉, 감각기관과 감각대상이 연기하는 것이며, 이 번뇌는 과거(36)와 현재(36)와 미래(36)에 일어나기 때문에 108번뇌라 한다. 이러한 모든 번뇌를 지칭할 때 108 번뇌라고 하며 모든 번뇌를 없애기 위해 행하는 수행이 108배라고 할 수 있다. (지인에 의하면 약 20분 걸린다고 한다)

육식이외에도 칠식(七識)과 팔식(八識)의 개념이 존재한다. 칠식과 팔식은 무의식의 영역이라 할 수 있다. 칠식은 말나식이라고도 불리며 육식과 팔식을 매개하는 역할을 한다. 팔식은 아뢰야식이라고도 부른다. 아뢰야식이란 마음활동의 근원적인 역할을 의미한다. 모든 말과 모든 행동 모든 생각 모든 경험을 하나의 정보로 저장하는 것이 특징이다.

3.3 밀교

밀교의 탄생 배경은 후기 대승불교의 철학이 복잡하고 난해하다는 것에 기반해 대승불교를 계승하여 나오게 되었다. 밀교는 실천적인 불교로 대중을 가까이할 수 있도록 한 것이 특징이다. 대표적인 경전으로는 탄트라, 대일경, 금강정경 등이 있다. 대승불교의 꽃이라 불리며 교리상 대승불교의 테두리 안에 있다고 볼 수 있다.

4. 정념(Sati)


팔정도의 정념에 해당하는 사띠(sati)는 몸과 마음에서 일어나는 모든 것과 일체의 사물을 있는 그대로 바라보는 것을 의미한다. 또한 대상을 잊지 않고 살피되 대상을 교란시키지 않도록 일체의 선택이나 판단을 멈추고 조용히 지켜보는 것을 뜻한다. 바른 사띠를 위해서는 사념처를 관하는 것이 필요하다. 사념처는 몸, 느낌, 마음, 법(dharma)를 관(觀)하는 것이다. 사띠의 기능으로는, 사띠를 확립한다면 오래전에 행한 일이나 말을 기억하고 상기할 수 있다는 것이다. 이 사띠라는 것은 앎과의 다른 개념인데. 부처는 사띠와 앎을 별개의 수행방법으로 나누어 실천해야 한다고 하였다.

5. 삼법인 (三法印)


삼법인이란 부처가 이 세계와 인생을 어떻게 생각하는지에 대한 3개의 기본원리를 의미하는 것으로 일종의 초기불교의 슬로건이라 할 수 있다. 핵심요소는 크게 3가지로 제행무상(諸行無常), 제법무아(諸法無我), 열반적정(涅槃寂靜)이 있다. 제행무상은 우주 만물은 항상 돌고 변하기 때문에 하나의 모양이 아니라는 것이다. 제법무아는 인연에 의해 생겨나는 것으로 만물은 무자아라는 것이고, 열반적정은 번뇌를 멸한 열반은 평온하다는 것이다.

Reference


[1] http://www.hyunbulnews.com/news/articleView.html?idxno=272114
[2] http://encykorea.aks.ac.kr/Contents/Item/E0042096
[3] http://www.hyunbulnews.com
[4] http://encykorea.aks.ac.kr/Contents/Item/E0069597
[5] https://m.blog.naver.com/cusongio/221533624581

 

당신을 이끄는 가치는 무엇인가?

 

이 책의 핵심은 우리가 추구해야 할 가장 좋은 가치관을 세움으로써 다른 이외의 것이 신경쓰이지 않도록 하라는 것이다.

 

LG AI 연구원인 전창욱님의 추천으로 읽게 되었다. 제목만 보았을 땐 단순히 삶의 우선순위를 정하고 우선순위에 따라 살아라는 내용인 줄 알았다. 하지만 저자는 신경끄기가 무심하다는 것이 아니라 목표에 따르는 역경에 신경 쓰지 마라는 것이다. 진정으로 의미 있는 것을 찾는 다면, 무의미하고 하찮은 것에 신경이 쓰이지 않기 때문이다. 또한 진정으로 가치 있는 것에 신경쓰는 법을 배울 때야만 사람이 성숙해질 수 있다 말한다.

 

책 내용 중 특히 인상 깊은 부분이 크게 2가지가 있었다.

 

[사람들이 하지 않는 질문]

저자는 사람들이 우리의 삶의 방향에 결정적인 영향을 미치지만, 대부분 잘 하지 않는 질문을 꼽았다. 그것은 1. 우리는 어떤 고통을 원하는가? 그리고 2. 무엇을 위해 기꺼이 투쟁할 수 있는가?라는 두 질문이었다. 옳다고 생각했고, 정말 좋은 질문이라 생각했다. 저자는 뮤지션이 되길 상상하며 꿈꿔왔지만 실패했다고 한다. 이유는 결과를 사랑했지, 과정속의 고통은 생각하지 않았기 때문이라 한다. 저자는 1번 질문을 통해 우리 삶의 성공을 결정할 수 있다 하였고, 2번 질문을 통해 우리의 존재를 규정할 수 있다고 했다.

 

[모두 내 책임]

내 삶에서 일어나는 일은 모두 내 책임이라는 것이다. 일반적으로 잘못과 책임이 함께 쓰인다. 하지만 저자는 내가 잘못하지 않았더라도 책임지는 삶을 살아야 한다는 것이다. 잘못과 책임을 구분할 것을 말한다. 가령 자신의 책이 재미없다면 자신의 잘못이라고 한다. 하지만 책을 더 읽을지 말지 결정하는 것은 우리의 책임이라고 한다. 문 앞에 아기가 놓여 있다면 자신의 잘못은 아니라고 한다. 하지만 어떻게 할지는 자신의 책임이라고 한다. 이는 <네이비씰 승리의 기술>이라는 책에서도 동일하게 강조하는 내용이다. 설령 내가 제어할 수 있는 부분이 아니더라도 책임져야만 한다는 것이다. 소위 극강의 리더십과 책임감을 가질 때 비로소 성장할 수 있고 성공할 수 있다는 것이다. 사실 이외에도 다른 책들에서도 공통적으로 강조하는 내용이기도하다. 힘들고 싫을 수 있겠지만 기꺼이 이 가치를 지키며 살아간다면 우리는 더 나은 삶을 살 수 있을 것이다.

 

나는 책을 읽으며 저자가 어떻게 마약까지한 문제아에서 많은 영향력과 뛰어난 통찰력을 지닌 사람으로 거듭날 수 있을까 궁금했다. 때문에 책을 읽으며 내내 이 사람이 가진 무기는 무엇일까 고민했다. 책을 읽으면 읽을 수록 느껴지는 것은 저자가 세상의 문제에 대해 인식론적으로 접근하여 생각을 풀어나가는 것이 뛰어났다는 것이다. 여러 구절이 있었지만 그 중 하나는 "나 자신, 타인, 사회, 문화, 세계, 우주"를 언급하는 대목에서 저자의 인식의 규모가 드넓음을 유추할 수 있었다. 인식론을 대표하는 종교인 불교의 내용을 여러 번 언급하는 것으로 보아 저자는 불교의 가르침을 많이 받은 것 또한 알 수 있었다. 삶의 경험적으로 비추었을 때 종교나 철학이나 과학에 대한 이해도가 있는 사람이 그렇지 않은 사람이 비해 더 농도 짙은 통찰력을 지니고 있는 확률이 높았는데, 이런 경험에 비추었을 때 저자는 충분한 통찰력을 갖고 있었고, 그의 말들 또한 현실적 지침으로 삼기에 충분했다.

 

"너 자신보다 대단한 것에 신경을 써라. 자신이 거대한 영원의 일부임을, 자신의 삶이 이해할 수 없는 위대한 창조의 일부를 이루는 과정일 뿐임을 받아들여라." - 마크 맨슨

 

별점: ⭐️⭐️⭐️

파이썬 코드를 작성하는데 있어 이따금씩 실수하는 것은 리스트나 딕셔너리 등에 요소를 추가할 때 콤마(,)를 붙이지 않는 것이다.

 

만약 아래와 같이 콤마를 붙이지 않을 경우 아래와 같이 리스트 내부의 요소가 결합되는 것을 확인할 수 있다.

 

위와 같은 것을 문자열 리터럴 결합이라 부르고 파이썬 내부적으로 의도적이고 문서화 되어 있는 동작으로,

 

디버깅 하는데 있어서 오랜 시간이 걸릴 수도 있으므로 주의가 필요하다.

 

따라서 이러한 문제를 피할 수 있는 코드 스타일을 체화 하는 것이 필요하다. 그 방법은 마지막 요소에 항상 콤마(,)를 붙이는 것이다.

 

파이썬 내부적으로는 아래와 같이 쉼표 배치 문제를 해결할 수 있도록 끝에 콤마(,) 이후에 요소가 없더라도 정상적으로 동작하도록 설계해두었다.

 

 

[KT 부사장이 들려주는 삶의 통찰]

KT 부사장은 오래전부터 여러 블로그나 SNS에 삶과 일에 대해 글을 써왔다. 나는 페이스북에서 그를 만날 수 있었고 그의 글은 많은 사람으로부터 공감을 얻거나 행동을 바꿀수 있는 영향력을 지녔음이 충분했다. 지도교수님 또한 그의 글을 보며 감사의 인사를 할 정도니 말이다. 약 일년 반이 넘도록 그의 글을 받아보며 훌륭한 통찰에 감탄하곤 했다. 하지만 피드가 많이 올라오다보니 그의 글이 묻히기도 했다. 때문에 한 권의 책으로 엮어서 볼 수 있으면 좋겠다는 생각을 가졌는데 이 책이 발간되었고 때문에 주저 없이 구입한 책이다.

책은 크게 삶과 일과 자신에 대한 이야기를 다룬다. 주로 일화 형식으로 구성되어 있고 거기에 대한 통찰이나 교훈을 전달하는 형태이다. 이 책으로부터 얻을 수 있는 것은 하나의 진실이 아닌 다양한 관점이라는 것이다. 자신이 일하면서 배우고 느낀 것들, 코칭을 하면서 배우고 느낀 것들을 일화와 엮어 설명한다. 이 책의 좋은 점 중 하나는 누구나 알아 듣기 쉽게 쓰였다는 것이다. 많은 것을 알고 있거나 통찰이 깊다면 조금이라도 뽐낼법 하지만 그런 부분이 전혀 느껴지지 않고, 독자를 끌어 안는다는 느낌이 강했다.

나는 책을 읽고 나서 핵심에 대해 한 마디로 요약하는 절차를 가지고 있는데 이 책은 그러지 못할 만큼 많은 통찰을 가지고 있었다. 통째로 책을 머리에 집어 넣고 다니고 싶지만 그러지 못한 것이 아쉬울 따름이다. 앞으로 이 책이 주위 사람들에게 선물하는 책이 될 것 같다. 나도 이 책을 구매하고 나서 다른 분께 같은 책을 선물을 받았다. 좋은 책은 당연 널리 퍼지나 보다.

"이 세계는 자신의 인식의 범위만큼 자신에게 존재한다" - 책 중에서

별점: ⭐️⭐️⭐️⭐️
완독: 2021년

 


아래는 개인적으로 책의 일부 내용을 요약하려 했던 내용이다.

 

실패한 후의 태도가 그 다음을 결정한다.

  • 승진 탈락도 피드백 받을 것
  • 제안서 탈락도 피드백 받을 것

조금 빈둥거려도 괜찮다(일하지 않는 개미)

  • 100% 모든 개미들이 일만하는 시스템보다 20%~30%는 노는 개미들이 있는 시스템이 더 오래 살아남는다.
  • 모든 개미가 일만하는 시스템에서는 개미들이 지치게 되면 집단의 멸망이 왔음.
  • 반면 일하지 않는 개미들이 일정 비율 있는 집단은 오래 존속하는 것으로 나타남.

동일한 일만 계속하면 인생이 통째로 사라진다.

  • 우리 뇌는 오감을 통해 들어오는 정보를 모두 저장하지 않는다고 한다.
  • 고효율을 위해 변화가 있는 부분만 처리하고 저장한다.
  • CCTV도 같다. 기존에는 전부 저장했지만 비효율적인 저장공간 때문에 변화가 있는 부분만 저장한다고 한다.

내가 나를 좌절시키는 것이다.

  • 그리스 철학자 에픽테토스는 한 때 노예였다. 그는 과학으로 따지면 코페르니쿠스의 지구가 돈다 정도의 엄청난 통찰을 발견했다.
  • 우리는 자신에게 일어난 사건의 영향을 받는 것이 아니라 그 사건에 대한 스스로의 해석에 영향을 받는다는 것이다.
  • 예컨데 누구의 죽음 또는 누구와의 이별에서 이별 그 자체에 영향을 받는 것이 아니라, "이젠 혼자야", "나 때문이야" 등으로 인해 자책하고 고통받는 것이다.
  • 해결 방법은 확대해석 하지 말고, 사건과 해석을 분리해서 사건을 쿨하게 받아들이는 연습을 하는 것이다.

업무의 신이 집에가서 인정받지 못하는 이유

  • 공적인 영역과 사적인 영역의 필요 능력이 다르다.
  • 사적인 영역에서는 효율보다 낭비가 때로 필요하고, 답보다 공감이 필요하고, 똑똑함보다 약간 바보스러움이 필요하다. 결론보다 과정이 필요하고, 지시보다 함께함이 필요하다. 냉정함보다 따뜻함이, 몸사림보다 몸 씀이 필요하다.

자랑할 것, 자부심을 가질 것이 무엇인가?

  • 요즘처럼 오픈 된 곳에서는 자랑할 만한 것, 자부심을 가질 만한 것이 점점 줄어든다.
  • 부자도 금융 부자, 주식부자, 부동산 부자도 적지 않다. 책 몇 권쓴 사람도 적지 않다. 산도 웬만큼 다녀서는 자랑하기도 어렵다. 맛집도 웬만큼 다녀선 안다고 이야기하기 어렵다. 와인도 웬만큼 마시고서는 자랑하기 어렵다. 골프도 잘 치는 사람이 수두룩하다. 예쁘고 잘생긴 사람들, 몸짱도 많아 웬만한 몸가지고 명함도 못내민다.
  • 진짜 다른 사람에게 영향을 줄 수 있는 것은 '순위로 정할 수 없는', '자신만의 특별한 것'이다. '자신의 개성'이고, '자신만의 취향'이며, '자신만의 자신감'이다.

생각만으로도 살 수 있다.

  • 유태인 수용소나 북한 수용소에 갇혔던 사람은 더 이상 희망이 없다는 생각으로 무기력해진 사람들은 그냥 쓰러져 죽었다고 한다.
  • 쥐도 설탕물을 먹이고 위통 유발주사를 놓았을 때 이후에는 설탕물을 먹으려 하지 않았다. 이후 설탕물을 억지로 먹였을 때 고통 속에서 죽었다. 설탕물은 아무 해가 없는 것인데도 말이다.
  • 암에 걸려도 97% 확률로 죽는다는 통계가 있더라도 나머지 3%가 되는 것은 선택이고, 실제로 이렇게 살아남는 사례가 있다.

억누르지말고 관점을 재해석 하라

  • 버스에서 누가 내 발을 밟으면 화가 나서 쳐다보거나 욕을 하려할 것이다. 하지만 그 사람이 맹인이라면 화가 녹아질 것이다.
  • 공격자가 아니라 어려움에 처한 사람이라는 것으로 뇌가 해석하는 순간 부정적 감정이 사라지는 것이다.
  • 따라서 부정적 감정은 관점의 재해석으로 해결될 수 있다.
  • 40대 이후엔 성격, 인내심을 바꾸기 어렵다. 하지만 하나의 비결이 있다면 관점을 변화시키는 것이다.

좋아한다고 너무 퍼주지마라

  • 보스조르메니 나지는 인간관계에서 보이지 않는 "관계 통장"이 있다고 한다.
  • 입금은 배려, 사랑, 칭찬, 코칭, 선물 등이고 출금은 폭력, 무시, 화, 비난 등이다.
  • 입금만 하면 상대방은 부채 의식을 청산하려 하기에, 베풀 때도 갚을 수 있을 정도여야 관계 지속이 가능하다.

수레가 있으면 길이 난다

  • 버는 돈이 적은데 저축이나 투자를 하라고? 글 솜씨가 없는데 글을 쓰라고? 말 재주가 없는데 발표를 하라고? 시간도 없는데 책을 읽고 신기술을 배우라고? 전치가 인프라도 없는데 전기 자동차를 도입하자고?
  • 저축이나 투자를 하면 돈이 늘어나고 글을 쓰면 글 솜씨가 늘고 발표를 하다 보면 말 재주가 늘고 새로운 방법을 학습하고 신기술을 배우면 여유 시간을 만들 수 있다. 전기차를 도입하면 전기차 인프라가 생긴다.
  • 수레가 있으면 길이 난다.

이 세계는 자신의 인식의 범위만큼 자신에게 존재한다.

  • 이런 메커니즘에 끌려다니지 않고 역이용 하는 법은 무엇(WHAT)을 원할지 결정하고 기록하고 이를 상상하면 HOW에 대해서는 뇌가 자동으로 실행해준다.
  • 자신이 원하는 것을 의도적으로 뇌에 심어 두라는 것이다. 그러면 뇌는 세상을 그 목표에 맞춰 자신에게 인식시켜준다.
  • 단 목표를 정할 때 긍정의 문장으로 해야 한다. 나는 10k을 뺀다는 것이 아니라, 나는 70kg이 된다. 나는 연봉 낮은 회사에는 안간다가 아니라 연봉 1억의 회사에 입사한다. 나는 담배를 끊는다가 아니라 나는 비흡연자가 된다이다. 그리고 기한을 정하고 매일 말로 선포하고, 이미지화 하라.

1. 문제 정의


100개의 계단이 있으며 나는 한 번에 10개의 계단을 오를 수 있는 능력을 가지고 있다.

 

이 때, 100개의 계단을 올라갈 수 있는 경우의 수는 몇 개인가?

 

2. 해결 코드


문제를 보고 생각할 수 있는 가장 초기의 코드를 작성한 것이다.

stairs = 100
skill = 10
table = [0 for i in range(stairs+1)]
table[0] = 1

for i in range(1, stairs+1):
    s=0
    for j in range(1,skill+1):
        if i-j<0:
            t=0
        else:
            t= table[i-j]
        s = s+t
    table[i] = s
print (table[stairs])

 

2. 초기 코드를 확인 후 줄일 수 있는 부분을 확인 후, 파이썬의 강점을 살려 개선 코드를 작성한 것이다

stairs = 100
skill = 10
table = [0 for i in range(stairs+1)]
table[0] = 1

for i in range(1, stairs+1):
    s=0
    for j in range(1,skill+1):
        t=(table[i-j],0)[i-j<0]
        s = s+t
    table[i] = s
print (table[stairs])

 

3. 개선 코드를 작성 후 하나의 함수로 만듦으로써 n 계단 오르기를 구현한 것이다.

def climbing(staris, skill):
    table = [0 for i in range(stairs + 1)]
    table[0] = 1
    for i in range(1, stairs+1):
        s=0
        for j in range(1,skill+1):
            t=(table[i-j],0)[i-j<0]
            s = s+t
        table[i] = s
    return table[stairs]
r =  (climbing(100,10))
print (r)

 

4. 함수의 최적화와 코드의 최적화를 구현한 것이며 아래의 코드는 계단 오르기 문제에 있어 가장 최적화 된 코드이다.

def climbing(n,m):
    table=[0 for i in range(n+1)]
    table[0]=1
    for i in range(1,n+1):
        s=(i-m,0)[(i-m)<0]
        table[i]=sum(table[s:i])
    return table[n]
a=climbing(100,10)
print (a)

한 줄 핵심 요약: 렌즈에서 반드시 왜곡이 생기며 영상처리를 위해선 왜곡을 보정해줄 수 있는 카메라 캘리브레이션(camera calibration) 과정을 거쳐야 한다.

 

1. 핀홀 카메라 모델


영상처리 분야에서 영상에 대한 모든 기하학적 해석은 핀홀 카메라 모델을 바탕으로 이루어진다. 핀홀이란 종이에 핀으로 뚫은 구멍처럼 매우 작은 구멍을 뜻한다. 핀홀 카메라는 바늘구멍 사진기라고도 한다. 렌즈를 사용하지 않고 작은 구멍을 통해 빛을 받아 들여 촬영하는 사진기로, 간단하게 제작이 가능해 교육용으로 쓰이기도 한다. 핀홀 카메라 모델은 물체에 반사된 빛이 우리 수정체를 거쳐 망막에 도달하는 구조를 가장 잘나타난 모델이라 할 수 있다. 하지만 매우 이상적인 모델이기 때문에 실제로는 렌즈의 특성에 따른 영상 왜곡 문제도 함께 고려해야 한다.

핀홀 카메라 예시

 

1.1 핀홀 카메라와 일반 카메라

1.1.1 핀홀 카메라

핀홀 카메라 모델의 단점은 빛이 아주 작은 구멍을 거쳐 오기 때문에 빛을 모아서 영상을 만들기에는 많은 시간이 걸린다는 점이다. 반대로 장점은 정확한 영상을 얻을 수 있다.

 

1.1.2 일반 카메라

핀홀 카메라는 빛을 모으는데 오랜 시간이 걸리기 때문에 핀홀 카메라를 사용하지 않고, 일반적인 카메라를 사용한다. 일반 카메라의 장점은 핀홀대신 렌즈를 사용하기 때문에 빛을 잘 모아서 영상을 빠르게 만들 수 있다는 장점이 있다. 하지만 단점은 렌즈를 사용하기 때문에 왜곡이 발생해 영상이 손상되다는 점이다. 따라서 일반 카메라에서 렌즈의 왜곡을 줄여주는 작업이 필요로 하게 된다.

 

1.2 핀홀 카메라 구조

간단한 구조이다. 일반 카메라와 비교해서 핀홀 평면은 카메라의 렌즈라고 생각하면 되고, X는 실제 물체라고 생각하면 된다. 영상평면은 물체가 핀홀 평면를 통해 들어온 빛이 맺혀 영상이 만들어지는 곳이라고 생각하면 된다. 물체에서 반사된 빛 중 하나의 광선 핀홀을 통과하게 된다. 핀홀을 통과한 광선은 영상평면에 투영되어 영상이 맺히게 된다. 이 때 영상평면에 맺히는 물체의 크기는 핀홀카메라의 초점거리에 의해 결정된다.

이를 수식으로 나타내면 위와 같이 $ -x = f({X \over Z})$ 가 된다.

 

 

  • f: 핀홀 카메라 초점거리
  • z: 카메라와 물체 사이 거리
  • X: 실제 물체 크기
  • x: 영상내의 물체 크기

 

1.3 핀홀 카메라 모델의 특징 및 한계점

핀홀 카메라 모델은 영상과 관련해서 3차원 기하 모델을 얻을 수 있다. 하지만 적은 양의 빛(광선)만 핀홀을 통과하기 때문에 영상을 구성하기 위해서는 충분한 빛을 받아들일 수 있는 시간이 많이 필요하다. 빠르게 영상을 생성하기 위해서는 넓은 영역으로부터 빛을 모아야 하고, 빛이 투영점에 수렴하도록 굴절시켜야 한다. 이런 작업을 수행하기 위해 일반적으로 렌즈를 사용하게 된다. 즉, 렌즈는 한 번에 많은 빛을 모아줌으로써 빠른 영상 획득을 가능하게 한다. 

 

1.4 렌즈의 특징 및 한계점

왜곡 없는 렌즈는 없다. 렌즈 왜곡은 제조 과정에서 발생한다. 수학적으로 이상적인 포물선 렌즈보다 구면 렌즈를 만드는 것이 더 쉽기 때문이며, 렌즈와 영상 센서를 완벽하게 정렬하는 것도 쉽지 않기 때문이다. 렌즈의 왜곡률이 적을 수록 비싼 렌즈(카메라)가 된다. 하지만 이러한 왜곡을 오히려 이용한 어안렌즈라는 것을 사용하기도 한다.

어안렌즈 예시

 

이러한 렌즈에는 왜곡이 생긴다는 특성 때문에 카메라로 찍은 것과 실제 세상은 다르게 보인다. 때문에 영상처리에 있어서는 이러한 왜곡을 없애줄 수 있는 카메라 캘리브레이션 과정을 필수적으로 필요로 하게 된다. 카메라 캘리브레이션 관련해서는 이후 포스팅에서 진행될 예정이다.

 

 

Reference

[1] https://carstart.tistory.com/179?category=209767

 

이 책의 핵심 메세지는 신호를 차단하고 깊이 몰입하라는 것이다.

 

0. 환경

한 실험이 있었다. 매우 간단하다. 손 목만 구부리면 된다. 그리고 뇌 활동을 체크한다. 놀랍게도 손 목을 구부린다는 결정을 하기전부터 뇌가 먼저 명령을 내리는 것이 모니터에 확인된다. '환경의 신호'에 반응하는 뇌의 속도가 내 의지보다 빠르게 일어난다는 것이다. 이 실험이 시사하는 바는 내 의지가 중요한 것이 아니라 주위 환경이 더욱 중요하다는 것이다.

 

1. 차단

하버드 대학생을 주제로 논문을 쓴 하버드생이 있다. 하버드 대학생의 가장 큰 특징은 자기 효능감을 주입하는데 뛰어나다는 것이다. 예를 들면 스스로에 대한 평가나 기대가 높고, 이 때문에 뛰어나다는 신호를 많이 듣게 된다고 한다. 하지만 이와 반대로 평범한 학생은 평범함과 관련된 신호를 많이 듣고 스스로에게 주입한다고 한다. 주목할 점은 정말 그렇게 된다는 것이다. 일종의 자기암시효과라고 할 수 있겠다. 또한 부정적인 신호는 순간적으로 뇌 속의 작업기억력을 떨어트린다고 한다. 작업기억력은 재능과 밀접하게 연관된 것으로 높을수록 고차원적 사고를 폭넓게 할 수 있다. 때문에 사회에서 평범하다는 일종의 부정적 신호는 계속해서 우리를 평범하게 만들거나 열등하도록 만든다고 한다. 그렇기에 저자는 주변의 신호가 1등의 신호가 아니라면 그 신호를 차단할 것을 말한다. 인간은 자라면서 기본적으로 사회 체계를 신뢰하도록 성장해 왔기에 개인을 향한 부정적 환경의 신호도 신뢰하도록 진화해왔는데, 우리는 이러한 부정적 신호를 차단 해야할 분명한 이유가 생긴 것이다.

 

2. 몰입

많은 공감을 이끌었던 단락이 있다. 우리는 의미를 가진 존재라는 것이며 우리는 이러한 의미를 가볍게 생각해왔다는 것이다. 나의 분야를 통해 이 세상을 보다 의미 있게 바꿀 수 있다는 나 자신을 초월하는 신념과 믿음, 그리고 내가 걸어가는 이 발걸음들이 모두 의미가 있다는 것을 인지한다면 우리를 향한 부정적 신호 앞에서 단단해질 수 있고 의미 있는 변화를 만들어 낼 수 있다는 것이다. 이 단락은 실제로 빈민가의 학생들을 대상으로 했던 학업 성취도의 뛰어난 변화의 결과로부터 비롯된 것이다.

 

저자는 말한다. 우리에게 위대한 목적과 가치관을 가지라고. 나는 원한다. 많은 사람들이 이를 가지기 위한 기회를 만나고 세상을 나은 곳으로 만드는 데에 함께할 수 있기를.

 

"두려워해야 하는 것은 아무것도 없다. 이해해야 하는 것이 있을 뿐이다." - 정주영

 

별점: ⭐️⭐️⭐️

1. 개인정보비식별화 개요

비식별화란 특정 개인을 식별할 수 없도록 하는 조치이다. 국회에서 데이터 3법이 통과되면서 도입되었다. 데이터 3법의 중요 내용 중 하나는 개인의 명시적 동의 없이 연구 목적으로 사용하기 위해서는 비식별화 조치가 이루어져야 한다는 것이다. 때문에 핀테크 기업이나, 금융 회사, 대학/연구소 등에서 연구나 서비스를 하기 위해 개인정보에 대한 비식별화에 대한 중요성이 증대되었다.

 

 

2. 비식별화에 사용되는 주요 개념

크게 개인정보, 가명정보, 익명정보로 3가지으로 구성된다. 아래 표가 핵심을 담고 있다.

 

개인정보

살아있는 개인에 관한 정보로 이름이나 주민번호 또는 영상이나 다른 정보와 결합해 개인 식별이 가능한 정보를 의미한다.

 

가명정보

개인정보의 일부를 삭제하거나 일부 또는 전부를 대체하는 등의 방법으로 추가정보 없이 특정 개인을 알아볼 수 없도록 처리한 정보이다.

 

익명정보

특정 개인의 주체를 알아볼 수 없도록 처리한 정보를 의미한다.

 

3. 비식별화 대상 자산 종류

자산 종류는 크게 식별자와 속성자로 구분되며 아래 표와 같다.

맨 아래에는 속성자가 있는데 속성자에 포함되는 내용은 아래 그림과 같다.

 

4.비식별화 조치 방법

5개의 처리기법과 17개의 세부기술로 구성되어 있으며 아래 그림과 같다.

 

 

Reference

[1] https://www.comworld.co.kr/news/articleView.html?idxno=49812

 

주파수 스케쥴링

DL/UL에 대한 스케쥴링 결정은 기지국(gNB)이 한다. DL은 DownLink로 기지국에서 단말로 신호를 보내는 것을 의미하고, UL은 UpLink로 단말기에서 기지국으로 신호를 보내는 것을 의미한다. 여기서 스케쥴링이란 주파수 자원을 누구한테 나누어 줄 것인가를 의미한다. 스케쥴링 방법에는 크게 2가지로, Opportunistic Scheduling과 Proportional Fair Scheduling이 있다.

 

Opportunistic Scheduling

Opportunstic Scheduling의 개념은 채널 컨디션이 좋은 유저에게 몰아주면 그만큼 data-rate가 높아지면서 좋은 채널을 유지할 수 있다는 것이다. 이러한 Opportunistic Scheduling이 만들어지게 된 배경으로는 1990년대 2G 시절에 wireless 채널을 어떻게 극복할지가 문제였기 때문이다. wireless 채널로 전송을 하게 되면 받은 signal의 변화가 컸고, 대체적으로 성능은 worst에 의해 결정되었는데 기본적으로 좋지 않은 것들이 많았다. 따라서 채널이 나쁘면 signal을 빠르고 많이 전송하고, 채널이 좋아지면 power를 적게 써서 궁극적으로, 받은 signal을 잘 유지해서 power control할 필요성이 있었다. 채널이 좋다면 received signal이 커서 에러가 작을테니 결국 redundancy를 많이 보내지 않아도 되기 때문에 사용되었던 스케쥴링 방식이다. 하지만 이러한 스케쥴링 방식에는 채널 컨디션이 좋은 유저에게만 몰아주기 때문에 전체적인 네트워크 차원에서 채널 컨디션이 좋지 않은 유저는 signal을 전송 받기 어렵다는 단점이 있었다. 극단적으로 가면 채널 컨디션이 좋은 유저만 고르기 때문에 평균적인 throughput은 좋지만 채널이 좋지 않은(cell-edge) 유저는 무시한다는 것이다. 때문에 이를 보완하고자 나온 스케쥴링 방식이 Proportional Fair Scheduling이다.

 

Proportional Fair Scheduling

spectral efficiency와 fairness를 고려해서 만든 스케쥴러이다. spectral efficiency는 채널의 data-rate를 높이는 것이고 fairness는 data-rate가 낮은 하위권(cell-edge) 유저 또한 함께 고려하자는 것이다. 구현하는 방법은 CQI (Channel Quality Information)의 히스토리를 모아 평균적으로 어느 정도의 data-rate를 가지는지 확인하고 평균에 비해 좋은 유저들에게 signal을 주파수를 할당하는 방식이다.

OFDM이란?

OFDM은 주파수(frequency)를 직교성(orthogonality)을 이용해서 각 신호를 구분하는 방식이다. 정식 명칭으로는 직교 주파수 분할 다중 방식이라 한다. 여기서 orthogonality는 사용자가 동시에 주파수를 사용하게 되었을 때, 특정한 유저가 선택하여 주파수를 수신할 수 있도록 하는 기술이다. OFDM의 궁극적인 목표는 기지국에서 보낸 정보를 각각의 단말들이 여러 사람의 신호에 영향을 받지 않고 각 단말들이 필요로 하는 정보만 추출할 수 있도록 하는 것이다. 결국  OFDM은 orthogonality를 이용해서 기지국(DL, Down Link)이 여러 단말에 정보를 한꺼번에 보내지만 각각의 단말(UL, Up Link)은 기지국이 자신에게만 이야기하는 것처럼 느끼게 할 수 있다.

 

OFDM을 사용하는 핵심 이유는 기존에 존재하던 multipath 문제를 해결하기 위함이다. orthogonality가 잘 되지 않는 일반적인 이유는 wave form을 잘 설계하지 않으면 multipath로 인해 orthogonality가 다 깨지게 된다. 이를 해결하기 위한 방법이 OFDM이다. 아래는 5G까지의 신호 구분 방식에 대한 변화이다.

1G → Analog

2G → TDMA

3G → CMDA

4G → OFDM

5G → OFDM

6G → OFDM (예상)

 

2G에서 사용한 TDMA 방식과 3G에서 사용한 CDMA 방식도 multipath fading으로 들어왔을 때 원래 생각했던 orthogonality가 깨져서 이를 극복하기 위해 equalizer라고 하는 advanced receiver를 이용해서 어느정도 보완했다. 하지만 그럼에도 불구하고 불안정하다는 것이 특징이다. 4G에서 OFDM 방식이 도입되면서 sinusodial(사인파)를 이용해서 multipath에도 orthogonality를 유지하고 있다. 5G 또한 OFDM을 사용하며 5G를 도입하기 이전에 중요하게 언급되었던 문제는 orthogonality를 어떻게 보장할 것이냐 였다. 6G 도입이전에도 마찬가지로 OFDM와 관련한 논의가 이루어질 것으로 예상된다. 

 

OFDM의 장점은 TDMA 방식이나 CDMA 방식보다 좋다는 것이다. multipath가 있더라도 orthogonality를 유지할 수 있고 기존에 도입되었던 equalizer 또한 필요가 없다. 반면 가장 많이 언급되는 단점으로는 High Peak-to-Average Power Radio (PAPR) 문제이다. 이는 variation이 큰 amplitude를 가지는 특징이 있고, amplifier 디자인이 어렵고 전력 손실이 많다는 특징도 있다.

 

여담이지만, 1G-5G를 정의하는 대표적인 기준은 Multiple Access 기술이다. 주어진 주파수에 얼마나 많은 사용자들이 사용할 수 있는가를 의미하는 것으로 주파수 공유 방식이 핵심이라 할 수 있다. 앞서 설명했던 바와 같이, 사용자들이 시간을 쪼개거나 코드를 쪼개거나 직교하는 주파수를 사용하자는 형식으로 발전해왔다. 먼저 나왔던 CMDA 방식 구현이 OFDM 보다 구현하기 어렵다. 하지만 더 어려운 CDMA 방법이 먼저 나온 이유는 CDMA로 사업을 하고자 했던 퀄컴이 1985년에 먼저 나왔기 때문이다.

+ Recent posts