일지/4-2학기(23.03.02~23.06.21)

20230530화-불합리, 싸피 인터뷰 준비, 팀 결성

제로타이 2023. 5. 31. 00:07

 

목차

     

    고데분

    오늘은 딥러닝 분류 테스크. mnist 데이터를 분류하는 과제를 수행했다. 그냥 따라하기만 해서는 재미 없다, 싶어서 회귀 문제로 바꿔서 도전을 해봤다. 결과는 좋지 않았다.. 왜 결과가 좋지 않았을까, 일단 회귀로 바뀐 이상 출력값이 실수이기에 정확도를 측정하는 것은 매우 어려울 수밖에 없다. 정확도를 측정하고자 한다면 반올림이든 뭐든 한 뒤에 비교해야 제대로 비교가 가능해지는 것이다. 
    그래서 반올림을 해봤는데

    결과는 이레 나왔다. 어느 정도 잘 예측은 하지만, 오답도 굉장하다. 분포의 형태로 표가 나왔는데, 사실 그냥 소맥 크엔으로 하면 정확도가 98퍼에 수렴하는 것을 굳이 이걸로 할 이유는 없을 것이다.
    하지만 왜 이렇게 차이가 날까, 궁금하긴 하다. 세심한 표현력이 정확도를 해치는가?
    생각해보자. 3과 4가 비슷하게 생기지는 않았다. 그런데 값으로는 둘이 꽤나 혼동되는 것처럼 보인다. 그럴 리가 있나? 없다. 따지자면 1과 7이 비슷하게 나오던가, 7과 9가 비슷하게 나오던가 하는 헷갈릴 만한 요소에 대해서 값의 흔들림이 컸어야 할 것 같다. 그러나 현재 나온 값은 전혀 그렇지 않다. 내가 보기에는 이 내부에서 각 숫자에 해당하는 이미지가 생성이 된 것이다. 그리고 그 이미지에 안 맞는 손글씨일수록 점수를 높거나 낮게 준 것이다. 즉, 높은 표현력이  각 라벨의 본을 형성했고, 그 본에 맞지 않는 놈들의 점수를 과도하게 이상하게 주게 되어 값이 이따구로 나왔다는 것이다. 표현력이 정확도를 해칠 수 있다는 것이다.
    학습이 종료될 때 학습 데이터 오차는 거의 0에 수렴했다. 말이 되냐. 이따구로 예측을 했는데. 근데 이건 검증 데이터에 대해서 한 값이다. 검증 데이터에 대해서는 오차가 0.5까지 나왔다. 즉 해당 오차는 과적합일 가능성이 높다는 뜻이다. 즉 모델은 학습 데이터에 맞춰서 회귀 함수를 준비했으며 그 함수는 어떤 글씨가 어떤 숫자에 해당하고 그것의 표준과 얼마나 닮았는가까지 평가를 하고 있었다. 그래서 이런 상태가 된 것이다.
    안 해봤지만, 학습 데이터에 대해서 혼동행렬을 다시 뽑았더라면 거의 다 정답에 근접하게 찍혔을 것 같다.

    why not? 해보면 되지. 내 추측이 맞는지 확인해보자고.

    오 과연..오차는 거의 없다. 학습은 정말 말 그대로 잘 된 것이다. 지나친 표현력이 오히려 정확성을 깨뜨린 것이 맞는 것으로 봐도 무방하겠다.

    공정성이 없는 것

    고데분 중간고사 성적이 나왔다. 내가 너무나도 낮은 점수를 받아서 오늘 시험지를 받아 확인해봤는데, 보니까 마지막 30점 짜리 문제에서 내가 5점을 받았더라고. 문제에는 'decision tree를 구성하시오.'라는 문구만이 적혀있었다. 여태 다른 문제에는 무얼 설명하시오라는 말이 명시적으로 드러나있어 나는 이 문제가 그냥 트리 구조를 그리기만 하면 되는 것인 줄로만 알았다. 다른 문제들은 구태여 설명하라고 적었고 이 문제는 그렇지 않으니 이 문제는 단답형식으로 딱 원하는 것만 보여주면 되는 것으로 받아들인 것이다.
    그런데 교수님은 그게 아니었단다. 주관식이면 당연히 풀이 과정이 들어가야 한다고 하더라고. 누가 단답형에 풀이과정을 쓰나? 주관식이라 해도 서술형이 있고 단답형이 있는데, 이 문제만 이런 식으로 요구를 했으면 굳이 얘는 서술형으로 쓰지 않길 바라는 것이라고 생각할 만하지 않은가? 왜 굳이 이 문제만 이렇게 단적으로 트리를 구성하라고만 써놨을까? 
    내 생각이 무조건 맞는 것은 아니다. 근데 이렇게 생각할 여지가 있게 문제가 나왔으면서, 채점은 풀이 과정을 썼을 때 점수를 주는 방식이라는 것은 도저히 용납이 안 된다. 우리 학과 시험에서도 문제는 전부 서술하라고 나온다. 서술하라고 하니까, 서술하는 것이다. 교수님이 애초에 풀이과정을 쓰길 바랐다면, 트리를 구성하고 과정을 설명하시오 라고만 썼어도 알아먹었을 것이다. 차라리 다른 문제들에서 설명하라는 말을 뺐으면 오히려 이 문제만 결이 다르구나 판단하고 다르게 쓰지도 않았을 것이다. 
    주관식의 통념이 그렇다는데, 누가 단답형의 문제에 그렇게 쓰냐고 따져도 교수님은 들을 생각이 없는 것 같더라. 다른 학생들은 왜 풀이를 썼겠냐고? 따지자면 걔네가 바보인 거지, 쓰지 않아도 될 걸 굳이 쓴 건데. 썼다 손 쳐도 그것으로 점수를 주는 게 말이 되나? 끝에는 결국 이제 와서 바꿀 수 없다 엔딩..
    결국 나머지는 다 맞고 이 문제에서만 22점이 깎였다 ㅋ 자신이 원하는 풀이가 있었으면 그걸 명시해야지, 왜 숨은 의도를 파악하게 만드는 것인가? 서술형에서 그러면 몰라, 서술을 요구하지도 않아놓고서는.

    교수님이 들을 생각이 없으신 것 같아서, 다음부터라도 문제 똑바로 내서 나같은 피해자 만들지 말라고 이야기하고 왔다. 
    평소에 태도 점수를 준다고 이야기해놓고서는, 내가 수업시간에 질문하고 오류 지적하고 해도 점수 하나도 안 주더만 오늘 오류 지적한 학우에게는 바로 플러스 점수를 주더라ㅋ 뭐 하자는 건지. 내가 여태 했던 것들이 일일히 따져서 점수를 받기를 바라는 건가? 이 수업은 조교도 그렇고 교수님도 그렇고 왜 이렇게 공정하지도 않으면서 엄격하려고 하는 걸까. 

    억울한 일을 당하면 힘이 빠진다. 이제 와 학점이 무슨 상관이냐, 싶어도 나란 놈은 뭔가 하는 것에 허투루 하는 게 잘 안 된다. 근데, 이번 일 덕에 조금 맘을 편히 먹을 수는 있을 것 같다. 열심히 하면 뭐하냐. 어차피 내가 막학기 수업을 들으면서 얻으려한 것은 내 지식과 실력, 경험이다. 학점 조져도 나하고는 아무런 상관 없다. 특히나 이런 불합리한 상황에서 채점되는 불공정한 점수 따위, 내게 하등 가치 없다. 덕에 내가 쉽사리 놓치고 싶지 않았던 것을 놓아주게 되는 격이니, 사실 나로서는 좋은 게 아닌가 싶기도 하다. 최근에 빅데이터 페스티벌 준비를 하고 있으니 이거라도 열심히 해보자고.

    그나저나 이거 기말은 어떻게 하냐? ㅋㅋ 어차피 점수는 조진 것 같은데.  

    페스티벌 팀 결성

    일단 오늘 14시에 알고리즘 교수님과 예정된 면담을 진행했다. 전농관 카페에서 면담은 진행되었고, 나보다 앞선 순서였던 신동운 학우 옆에 나도 꼽사리를 껴서 같이 듣다가 끝까지 함께 셋이서 이야기를 나눴다. 이야기는 뭐, 취업 관련은 아니고 그냥 어떤 것을 공부하면 좋고 어떤 것에 어떤 특징이 있고 하는 이야기들. 
    당장의 내게 꼭 필요한 것을 아닐지 모르지만, 장차 내가 이 업계에 발을 담그면서 알아야 할 기본적인 내용들. 교수님과 이야기를 나누다보면 나는 계속 편한 느낌을 받는다. 굉장히 열린 마인드의 소유자이신 것 같은데 그것을 내가 공부하고자하는 업계에 대해서 풀어주시니 내가 따라가기도 좋고, 유의 깊게 듣게 된다. 

    이후에 수학과 학우님도 오셨는데, 그때가 15시. 내가 에타에서 나와 함께 하기로 한 학우를 만나기로 한 시각이 15시라 슬슬 나는 자리를 떴다. 마침 신동운 학우도 다음 강의를 들으러 떠났고, 결과적으로 수학과 학우와 교수님만이 남아 이후 면담을 진행했다. 
    나는 그 과정을 근처에서 보고 있었던 것이, 내가 페스티벌을 위해 미팅하기로 한 장소가 전농관 카페였기 때문이다. 거의 바로 옆 테이블로 넘어가서 나는 그 학우와 미팅을 진행했다. 
    나보다는 두 살 어리고 4학년, 수학과이면서 빅데이터 분석학을 복전하고 있는 학우. 하려는 목표가 나와 비슷해 보여서 나는 이 학우와 함께 하는 것이 좋겠다는 생각이 들었다. 무엇보다 내가 약한 이론 기반을 이 친구에게서 얻을 수 있을 것 같았다. 사실 이 학우가 별로더라도, 내게 강제성을 부여해줄 수 있는, 동인을 부여해줄 수 있는 사람만 있으면 되기에 누구든 상관이 없다고 생각했다. 프로도 씨는 요즘 살짝 공부 마음이 해이해진 것 같아서 내 원동력이 되어주기에 부족하다는 느낌을 받았기에, 함께 할 누군가가 필요했다. 
    오프라인 설명회 참석은 같이 가기로 마음을 먹어서 시간을 늦춰 6.13 오전에 가는 것으로. 고데분? 뭐하러 듣냐, 그냥 내게 중요한 것 하는 게 내 인생에 훨 이득이다. 나는 그 수업에 대한 신뢰를 잃었기에 더 이상 본분을 제대로 다할 생각이 전혀 없다. 화요일 오전에 그냥 확실하게 설명회에 가서 내가 알아야할 정보들을 더 알아보고 본격적으로 대회에 임하겠다. 

    이 친구와 이야기하면서 몇 가지 계획을 수립했다. 내가 평소에 생각하고 있었던 것. 딥러닝 지식의 기반을 다시금 잡고, 그것을 코드로 구현할 수 있는 수준까지 익숙해지는 것. LLM을 대회에서 바라고 있으므로 그쪽까지 나아가는 것이 중요해보인다. 따라서 NLP 계열의 모델들을 쭉 훑으면서 공부하는 것이 도움이 될 것이라 판단하고, 밑러닝 1,2권을 공부한 후에 트랜스포머로 넘어가 장차 gpt, 이후 나온 모델들을 훑어보는 것으로 마음 먹었다. 
    일단 이번 주까지 밑러닝 1권 완독이 첫째 목표. 어차피 이 친구도 학교에서 머신러닝 공부를 하고 있기 때문에 내용이 어렵지는 않을 것으로 판단했고, 그래서 진도를 빼는데 크게 지장이 없을 것이라 생각했다. 나는 이미 한 번 본 적은 있으니까 더더욱 그렇다.

    퍼셉트론

    그런 고로 빠르게 내용 정리 간다. 사실 이것도 카테고리를 따로 나눠서 공부를 하고 싶은 마음도 있지만, 당장은 시간적인 여력이 많지 않아서 조금 촉박하게 요점 정리를 하려고 한다.

    퍼셉트론은 입력과 출력을 가진 노드. 입력에 가중치를 곱하고, 이 값이 임계값을 넘을 때 뉴런이 활성화된다. 이 임계값을 편향이라고도 부른다. 

    기본적인 퍼셉트론 구조는 XOR 문제를 해결할 수 없다. 비선형 문제를 해결할 수 없다는 것. 그러나 활성함수를 넣어 비선형 효과를 준채 층을 쌓으면 해결이 가능하다! 
    이론적으로 2층의 비선형이 들어간 퍼셉트론은 모든 함수를 표현할 수 있다.
    and or 게이트. 반가산기와 전가산기, 그다음에 alu, cpu.

    신경망

    이 퍼셉트론의 가중치를 인간이 일일히 지정하지 않아도 되는 것이 바로 기계학습의 출발점이다. 인공 신경망을 구성해보자.

    일단 퍼셉트론의 구성을 생각해보자. 입력에 가중치를 곱하고 편향을 더해서 그것이 0보다 크면 1, 아니면 0을 출력한다. 이 출력 방식을 헤비사이드 스텝 함수, 계단함수로 생각해서 표현하는 것이 가능하다. 이러한 계단함수, 즉 출력의 활성이 일어나는 것에 관여하는 함수를 활성함수라고 부른다. 

    활성함수- 입력신호의 총합을 출력 신호로 변환하는 함수. 가장 기본적인 것은 계단함수. 활성화 함수는 다음 노드에 대해서 성립하는 개념이 아니다. 입력 신호의 총합을 얼마나 활성화시킬지를 말한다고 생각하라. 다음 노드가 얼마나 활성화되는지를 이야기 하는 것이 아니다. 입력을 받는 노드가 얼마나 활성화될지. 이 말의 뉘앙스를 잘 파악하는 것이 중요하다.
    다층 퍼셉트론으로 나아가기 위해서는 이 활성함수를 계단함수로 둬서는 안 된다. 일단 가장 흔하게 사용되었던 시그모이드를 먼저 보자.

    시그모이드의 모양. 시그모이드 자체가 s자 모양이라는 뜻이다. 계단함수와 비교하기 좋은 함수.
    공통점 - 0을 경계로 출력이 바뀐다. 입력이 작을 때 0, 클때 1에 가깝다.
    차이점 - 출력이 연속적이다(미분 가능). 확률 표현이 가능하다(흐름의 양을 조절한다고 본다 보통)

    둘의 중요한 공통점은 비선형 함수라는 것이다. 이전에 동차성과 가산성이 있을 때 선형 함수라고 이야기한 적이 있다. 간단하게 말하면 스칼라배의 결과가 x값에 하든 y값에 하든 똑같은 것이 동차성, x값에서의 합이 y값에서의 합의 결과와 같을 때 가산성이라 한다. 근데 엄밀하게 이러한 함수만을 선형 함수라고 부르지는 않는 듯하다. 
    더 간단하게 말하면 출력이 입력의 상수배만큼 변하는 함수를 선형 함수라 한다. 곧은 직선 같은 것이 선형 함수인 것이다. 대충 입력에서의 변화가 출력에 대한 변화와 같다 싶으면 선형함수라 부르는 식인 것 같다. 선형함수는 활성함수가 되어선 안 된다. 층을 쌓아도 한층으로 귀결되는 결과가 나오기 때문이다.

    회고 및 다짐

    간만에 늦잠을 잤다. 평소에는 7시만 되도 알아서 깨더니만 오늘은 알람을 듣고 잠깐 늦장을 부린 사이 30분이 지나버려서 아침도 제대로 못 먹고 나와야만 했다. 물론 내가 그 정도로 늦잠을 잤을 것이라곤 생각도 못 했다. 그나마 9시 전에 일어나서 망정이지. 운동하면서도 계속 하품이 나오는 것이 지금 굉장히 피로하다는 게 느껴진다. 뭘 했다고 이리 피로한 건지.. 혹시 식단에 뭔가 부족한 게 있는 건가?  잠도 잘 못 자고, 여하튼 영 컨디션이 아니다. 정신적인 스트레스가 큰 것 같기도 하다. 

    그러고보니 어제 경찰이 왔다갔다. 복도에서 남녀가 웅성거리는 소리가 짧게 들리더니 누군가 문을 두들기길래 뭔가 했다. 처음에는 택배인가 싶었는데, 김성수?라는 사람을 찾더라고. 문을 닫고도 소통이 가능하다보니 그냥 말로만 아니라니까 그 후 옆으로 쭉 문을 두들기며 물어보더라. 보니까 옆옆집 사람. 복도에서 이야기를 하니 대충 내용이 들렸는데 연락이 안 돼서 지인이 신고를 한 모양이다. 뭐.. 히키코모리처럼 살고 있었던 것일까, 문득 이웃의 사연이 궁금해지는 날이었다. 
    처음에 이웃에 대한 안 좋은 인식이 한번 콱 박히지 않았더라면 간단하게 친해질 계기를 갖고 간단한 모임 같은 것을 가져볼까 생각했었는데, 아쉽게 됐다. 닭가슴살 공구라던가, 자취 꿀팁 등의 요소를 공유할 수 있다면 아무래도 좋지 않을까 싶었던 것이다.

    일단.. 1차 고비는 넘겼는가. psat 같은 시험은 정말 내 적성에 안 맞는데 말이다, 그래도 겨우 턱걸이는 넘긴 모양이다. 이번 기회는 내게 소중하다. 면접을 볼 수 있다는 점에서 특히나 소중하다. 학부 연구생 면접으로 처음 거창하게 떨어졌지만, 이번에는 조금 더 제대로 준비해보자. 이 시기의 경험을 절대 놓쳐서는 안 된다. 내가 할 수 있는 것과 아는 것을 잘 정리하는 시간이 필요할 것이다. 

    잠깐. 근데 싸피.. 졸업자랑 졸업예정자만 가능하단다.
    나.. 다음 학기 유예할 생각이었는데. 토익 안 봤는데. 
    방금 허겁지겁 봉사 시간 확인해봤는데, 마침 군대에서 헌혈한 게 딱 8번이고 그게 각각 4시간씩 인정이 돼서 30시간을 채울 수 있었다. 
    이거 어떡하지. 싸피를 위해 졸업을 한다? 내가 졸업하지 않고 누릴 수 있는 혜택을 포기하라? 대학생 신분으로 얻을 수 있는 것들은? 뭐가 있지? 지금 이 기회를 놓치는 것은 좋은가?
    일단.. 졸업은 할 수 있나? 봉사 시간은 채웠고, 토익은 공부하면 된다.

    다행히도.. 딱 한 시험만이 6.30전까지 성적이 발표된다. 마침 내일부터 추가접수를 받는다.. 그러니까 내게는 단 한번의 기회만이 있는 것이다. 단 한번의 기회로 850점을 넘기면 된다. 
    아직 다른 것들은 정확하게 모르겠다. 계절학기 이수를 통해 졸업학점을 충족할 수 있는 것인지. 봉사는 언제까지 제출인 건지. 이것들을 확실히 안다면 정확하게 결정을 내릴 수 있을 것이다. 일단 토익은 볼 것이고, 준비해서 850점은 넘길 것이다. 지금 내 영어 실력은 이전보다 조금 더 좋아진 상태라 아마 큰 무리는 없이 점수를 딸 수 있지 않을까 한다. 처음에 아무 공부 안 하고 봤을 때가 835, 이후에 한 달 단기 속성으로 학원 다니고 925였던 것 같은데, 그때보다 실력이 줄지는 않았을 것이라 생각한다. 오랜만에 보는 거니까 조금 연습은 해두는 것이 좋겠지. 
    그래도 말이다, 이렇게 다 해놨는데 결국 졸업이 안 된다는 말 들어버리면 정말 슬플 것 같다. 그러면 그런대로 유예를 유지하면서 뭔가 내가 누릴 수 있는 혜택을 노려야겠지만, 결국 싸피를 못 한다는 것 아니냐. 지금 면접 스터디 잡아두고 면접 준비 열심히 알아보는 중인데. 이제 와서 갑자기 토익을 공부해야 하는 상황이 되어버렸다. 딥러닝 공부는..?
    기말 시험은? 아, 이건 포기할 수 있다. 알빠냐.

    아.. 싸피. 졸업... 갑자기 신경써야 할 게 엄청 많네.. 프로도씨의 도움을 좀 많이 받았다. 봉사 관련 어떻게 확인하는지를 하나도 모르는데 같이 공부하는 차에 조언을 마구 해주더라고.
    프로도씨랑 이야기할 때는 희망이 조금 생겼는데, 통화를 끊으니 지금 엄청 불안하다. 내일 과사에 물어봤는데 결국 안 되는 거면.. 어떡하냐.