스토리 홈

인터뷰

피드

뉴스

매니지먼트에 관심있다면 꼭 읽어야하는 글
조회수 3605

어리석은 일잘러의 슬픈 착각 13가지

간만에 일 얘기로 좀 돌아왔어요. 오늘은 일잘러 얘기랍니다. 브런치나 구글, 일분, 카카오채널, 블로그, 팟캐스트, 유튜브...등등 모든 채널에 '일' 에 대한 얘기가 가득해요. 대부분 두 가지 아젠다가 있더군요. 1. 일을 잘하는 방법2. 일을 못하는 이유이겁니다. 모두의 행복한 업무생활을 위한 좋은 콘텐츠들이지만, 이런 테마가 넘쳐나고 이래저래 공유되면서 모든 사람들이 일을 잘해야 하고, 일을 못하는 건 일종의 죄...? 처럼 여겨지는 부분도 생기는 듯 해요. 일정부분 동의해요. 일을 못하는 건 어떤 측면에서 민폐가 될 수 있겠죠. 개냉정한 말이지만, 결국 당신의 일못함은 다른 누군가의 피해와 희생을 요구하거든요. 그러니 업무적으로 여러가지 열폭 컨텐츠가 등장하는 것이 이해는 갑니다. 하지만 좀 불편한 부분이 있었어요. 소위 자칭 일잘러들의 미묘한 깔아봄이 있더라구요? 마치 일 잘하는 사람이 조금 더 나은 우성종자같은 행세를 하고 다닌다는 거죠. 그리고 자꾸 일손이 느리거나 실수가 잦은 누군가를 가르치려 들거나(기분나쁘게) 또는 깝깝하다는 듯한 제스쳐를 취하는 모습을 자주 보곤 했어요. 문득 그런 생각이 들죠. 뭐지 저 자의식은?... 어디서 일잘함 인증이라도 받아온 건가..싶은.물론 그럴 수 있죠. 진짜 일처리가 AI마냥 정확한 종족들이 있어요. 그럼 그냥 본인에게 좋은 일이죠. 빨리 끝내고 빨리 퇴근하고 쉴 수 있으니 부모님께 감사하면 될 일입니다. 그래요 이분들은 인정합니다.하지만 종종.. 아무리 봐도 일을 잘하지 않는데... 본인이 일을 잘한다고 착각하는 분들이 있더라구요.  오늘은 자칭 일잘러들의 슬픈 착각을 좀 까보려고 합니다. 1. 멋진 단어 VS 쉬운 단어일잘러는 중학생들도 블록체인을 이해할 수 있게 설명하는 분들입니다. 자칭 전문가라며 말도 안되는 영어와 약어, 전문용어를 마구 섞어서 말씀하시는 분들이 있는데 대충 느낌은 알겠습니다. 의사들의 처방전같은 전문성을 어필하고 싶었던 모양입니다. 하지만 그것은 파스타 속의 브로콜리마냥 굉장히 거슬리는 거에요. 빼고 먹고싶은데 자꾸 달팽이관에 걸려서 불편하달까요. (전 브로콜리를 싫어해요.)2. 말이 많은 것 VS 말을 잘하는 것LA들어간다 귀벌려본인의 주장을 설명하기 위해 수백마디의 근거와 예시가 필요하다면 이미 그 주장은 힘이 없는 거예요. 가끔 목소리 크고 또박또박한 발성으로 몇 시간 내내 트렌드와 동향, 방대한 자료와 근거를 들어 주절주절 멋진 일대일 강의를 하시는 분들이 있는데... 그건 '말을 잘 하는 것 처럼' 보여요. 하지만 귀에 남는 건 아무것도 없다구요. 계졀밥상에서 2시간 내내 계속 다른 메뉴먹는 느낌이야. 배는 부른데 뭘 먹었는지 모르겠어. 짧고 간결하지만 쏙쏙 이해되는 어휘로 명확한 근거 하나로 부연하는 게 능력이예욤.3. 냉철한 것 VS 싸가지없는 거일을 할 때 냉정한 것과 싸가지가 없는 건 다릅니다. 일을 하라고 했지 인격을 건들라고는 안했거든요. 가끔 '결과를 잘 내기 위해서' 냉정하고 사정 봐주지 않는 오더를 내리시는 분들이 있는데, 진짜 일을 잘 하시는 분들은 사람의 소중함을 먼저 캐치하시지 않을까요? 도깨비방망이마냥 사람을 갈아넣으면 어떤 일이든 할 수 있습니다. '다음'이 없을 뿐.4. 빨리 하는 것 VS 대충하는 것이렇게 빨리해도 잘해야지.빨리하라고 했지 대충하라곤 안했습니다. 쟈긴 막 일잘한다고 후다다닥 끝내놓고 커피 한 잔 마신다고 어디 나가있고 그러는데..막상 인수인계 받아서 작업해보면...빈 구석이 너무 많아서 다시 피드백 정리하거나 요청하고, 아님 내가 그냥 만드느라 더 느려져요. 성격급하고 빠르게 일처리 해놓고 딩가딩가하는 건 일을 잘하는 게 아닌 것 같아요. 빠르고 정확하게 해야죠.5. 완벽주의 VS 그냥 일손이 느린 타입'어우 저는 완벽주의 라서요!.. 꼼꼼하게 하나하나 보는 타입이예요.'꼼꼼하게 보고 완벽하게 하는 거 다 좋은데, 마감시간은 맞췄으면 합니다. 그냥 일손이 느린 거에 대한 묘한 변명같아요. 6. 프로다움 VS 그냥 드러운 성격거들먹거리는 말투로 '나랑 일하기 힘들 거야.' 이라고 자기어필 하시는 사수가 있더라구요. 뭐 어쩌라는 걸까요? 싸우자는 걸까요..오지말라는 걸까요. 그게 소위 프로다움이라고 여기시는 분들이 종종 있더라구요. 밑에 부사수를 조져서 일을 '가르쳐줄거다' 그러니 너가 내 속도에 따라와라.. 하는 건데. 여긴 군대가 아니에요. 그건 프로다운 게 아니라, 사람을 다루지 못하는 미숙함이고 그냥 성격이 더러운 게 아닐까 싶습니다.7. 빠른 의사 결정 VS 독선과 고집의사결정이란 건 일단 듣고 각 의견의 장단점을 구분해서 취사선택 또는 합의점을 도출하는 거에요. 팀원들이 20가지 아이디어를 내고 10가지 피드백을 냈는데 결국 피드백은 쌩까고 본인이 낸 아이디어를 선택했다면 그건 의사결정일까요? 종종 이런 독단을 '난 쿨하게 의사결정하는 편이야! 길게 끌지 않아.' 라고 생각하는 분들이 있는데 그거 아닙니다. 그냥 고집쟁이세요.8. 자기반성 VS 정신승리페북에다가 자꾸 자기반성 글 쓰시는 분들 있어요. 회고 비슷하게. 알겠는데, 자기반성은 개선점이 행동으로 드러나야 의미가 있는 겁니다. 페북에다가 의지만 불태우는 건 그냥 정신승리에요. 뭔가 문제가 있었고 갈등이 있었다면 재빨리 해결하고 당사자에게 사과를 구하고 행동으로 보여주면 될 일입니다. 9. 일잘러 VS 뒷담쟁이일을 잘 한다는 건 벼슬이 아닙니다. 누군가를 깔 일도 아니죠. 항상 내가 일 잘하는 것처럼 느껴질 때는 그런 생각이 든단 것 자체가 '지금 내가 좆밥이구나' 라는 걸 잘 기억해야 합니다.10. 이론쟁이 VS 재수탱이일을 어디 교과서로 배웠는지 자꾸 연습문제 뒷장에 '생각해봅시다.' 같은 질문들만 던지고는 팔짱을 끼는 분들이 있어요. 이런 사람들이 잘 팔아먹는 단어가 '기획'과 '전략' 인데.... 기획은 책상앞에서 펜대굴리면서 하는 게 아니더라구요. 이론만으로 하는 것도 아니고. 아이디어만(그것도 시덥잖은) 내놓고 자꾸 데카르트같은 딴지만 거는 분이 있다면 조용히 귓속에 집에 가라고 속삭여주세요. 지금 발로 뛰면서 현장서베이 다니고 레퍼런스 찾기도 바쁘니까.11. 인사이트 VS 헛소리인사이트..라는 단어가 21세기 멋진 단어 BEST5에 등극한 모양인데 인사이트라는 건 심도를 꿰뚫는 깊이와 다양한 근거를 바탕으로 내는 가설이자 관점입니다. 페북에서 공유해온 글3,4개 읽고 떠들고 다니는 '내 생각' 정도가 아니라고 생각해요. 어디서 복제해온 정보들을 내 것이라고 착각하면 안돼요. 12. 유도리 VS 가라일을 유연하고 상황에 맞춰 해결하는 능력은 매우 중요합니다. 우린 이걸 유연성 내지는 유도리라고 하죠. 근데 이게 모든 일을 그냥 대충 그때 그때 임시방편으로 처리하란 얘기가 아니에요. 가끔 말예요. 직급이 올라가고 권한이 생길 수록 이 유도리를 시도때도 없이 써먹는 분들이 있더라구요. '그냥 대충 해, 내가 잘 말할께!''아 그분 내가 아는 분이야, 그냥 그렇게 한다고 해''이번거 그냥 사, 내가 이사님한테 말할께. 술 사드리면 풀려.'직원입장에선 개쿨하고 능력쩌는 상사같아 보일 수도 있겠지만..결국 이런 식의 일처리는 어느 지점에선 터지게 되어있거든요. 가라와 유도리는 좀 다릅니다. 정상적인 절차 내에서도 효율적인 결론을 만들 수 있어야 레알 일잘러죠. 13. 용기있는 1인 VS 딴지쟁이모두가 YES라고 말할 때 NO라고 말하는 소신있는 일잘러분들이 있어요. 좋아요. 그런 자세. 모두에게 좋은 결과를 위해 전투적으로 리스트를 도출하고 어필하는 거 좋습니다. 뭐 한 편으론 '불평만 말하지 말고, 해결책을 가져와라' 라는 말도 있던데, 솔직히 해결책 안가져와도 됩니다. 리스크를 발견한 것만도 대단한 거에요. 문제는 그 리스크가 진짜 '유의미'한 리스크인가 하는거죠. 괜히 색이 맘에 안들고, 디자인이 어떻고, 뭔가 그냥 느낌적으로 별로인 것 같고, 사람들이 그냥 안좋아할 것 같고, 자기 친구들3명한테 물어봤는데 이거 아니라더라....이런식의 피드백은 졸라 그냥 딴지일 뿐입니다. 남의 말 잘라먹고 자기 주장 좋아하고 불평을 똑부러진 말투로 늘어놓는 것 뿐이죠.  일을 잘 하는 건 기획안을 몇 분안에 만들 수 있느냐..로 평가되는 게 아니라고 생각해요. 게다가 또박또박과 똑부러짐, 전문적이고, 말빠르고, 목소리크고, 성격급하고, 까칠하고, 고집있는 건 일잘러와는 사실 별 상관이 없어요. 그건 그냥 성격이나 성향문제일 뿐이죠. 회사와 동료 앞에는 모두 co- 접두어가 들어가잖아요. 일의 본질은 '함께' 하는 겁니다. 지가 못하는 게 있으면 도움을 빠르게 요청하고, 내가 잘 하는 게 있으면 부족한 분과 콜라보해서 빨리 끝내고. 일을 '돌아가게' 만드는 사람이 진짜 일잘러가 아닐까욤..
조회수 3278

Attention is all you need paper 뽀개기

이번 포스팅에서는 포자랩스에서 핵심적으로 쓰고 있는 모델인 transformer의 논문을 요약하면서 추가적인 기법들도 설명드리겠습니다.Why?Long-term dependency problemsequence data를 처리하기 위해 이전까지 많이 쓰이던 model은 recurrent model이었습니다. recurrent model은 t번째에 대한 output을 만들기 위해, t번째 input과 t-1번째 hidden state를 이용했습니다. 이렇게 한다면 자연스럽게 문장의 순차적인 특성이 유지됩니다. 문장을 쓸 때 뒤의 단어부터 쓰지 않고 처음부터 차례차례 쓰는 것과 마찬가지인것입니다.하지만 recurrent model의 경우 많은 개선점이 있었음에도 long-term dependency에 취약하다는 단점이 있었습니다. 예를 들어, “저는 언어학을 좋아하고, 인공지능중에서도 딥러닝을 배우고 있고 자연어 처리에 관심이 많습니다.”라는 문장을 만드는 게 model의 task라고 해봅시다. 이때 ‘자연어’라는 단어를 만드는데 ‘언어학’이라는 단어는 중요한 단서입니다.그러나, 두 단어 사이의 거리가 가깝지 않으므로 model은 앞의 ‘언어학’이라는 단어를 이용해 자연어’라는 단어를 만들지 못하고, 언어학 보다 가까운 단어인 ‘딥러닝’을 보고 ‘이미지’를 만들 수도 있는 거죠. 이처럼, 어떤 정보와 다른 정보 사이의 거리가 멀 때 해당 정보를 이용하지 못하는 것이 long-term dependency problem입니다.recurrent model은 순차적인 특성이 유지되는 뛰어난 장점이 있었음에도, long-term dependency problem이라는 단점을 가지고 있었습니다.이와 달리 transformer는 recurrence를 사용하지 않고 대신 attention mechanism만을 사용해 input과 output의 dependency를 포착해냈습니다.Parallelizationrecurrent model은 학습 시, t번째 hidden state를 얻기 위해서 t-1번째 hidden state가 필요했습니다. 즉, 순서대로 계산될 필요가 있었습니다. 그래서 병렬 처리를 할 수 없었고 계산 속도가 느렸습니다.하지만 transformer에서는 학습 시 encoder에서는 각각의 position에 대해, 즉 각각의 단어에 대해 attention을 해주기만 하고, decoder에서는 masking 기법을 이용해 병렬 처리가 가능하게 됩니다. (masking이 어떤 것인지는 이후에 설명해 드리겠습니다)Model ArchitectureEncoder and Decoder structureencoder는 input sequence (x1,...,xn)<math>(x1,...,xn)</math>에 대해 다른 representation인 z=(z1,...,zn)<math>z=(z1,...,zn)</math>으로 바꿔줍니다.decoder는 z를 받아, output sequence (y1,...,yn)<math>(y1,...,yn)</math>를 하나씩 만들어냅니다.각각의 step에서 다음 symbol을 만들 때 이전에 만들어진 output(symbol)을 이용합니다. 예를 들어, “저는 사람입니다.”라는 문장에서 ‘사람입니다’를 만들 때, ‘저는’이라는 symbol을 이용하는 거죠. 이런 특성을 auto-regressive 하다고 합니다.Encoder and Decoder stacksEncoderN개의 동일한 layer로 구성돼 있습니다. input $x$가 첫 번째 layer에 들어가게 되고, layer(x)<math>layer(x)</math>가 다시 layer에 들어가는 식입니다.그리고 각각의 layer는 두 개의 sub-layer, multi-head self-attention mechanism과 position-wise fully connected feed-forward network를 가지고 있습니다.이때 두 개의 sub-layer에 residual connection을 이용합니다. residual connection은 input을 output으로 그대로 전달하는 것을 말합니다. 이때 sub-layer의 output dimension을 embedding dimension과 맞춰줍니다. x+Sublayer(x)<math>x+Sublayer(x)</math>를 하기 위해서, 즉 residual connection을 하기 위해서는 두 값의 차원을 맞춰줄 필요가 있습니다. 그 후에 layer normalization을 적용합니다.Decoder역시 N개의 동일한 layer로 이루어져 있습니다.encoder와 달리 encoder의 결과에 multi-head attention을 수행할 sub-layer를 추가합니다.마찬가지로 sub-layer에 residual connection을 사용한 뒤, layer normalization을 해줍니다.decoder에서는 encoder와 달리 순차적으로 결과를 만들어내야 하기 때문에, self-attention을 변형합니다. 바로 masking을 해주는 것이죠. masking을 통해, position i<math>i</math> 보다 이후에 있는 position에 attention을 주지 못하게 합니다. 즉, position i<math>i</math>에 대한 예측은 미리 알고 있는 output들에만 의존을 하는 것입니다.위의 예시를 보면, a를 예측할 때는 a이후에 있는 b,c에는 attention이 주어지지 않는 것입니다. 그리고 b를 예측할 때는 b이전에 있는 a만 attention이 주어질 수 있고 이후에 있는 c는 attention이 주어지지 않는 것이죠.Embeddings and Softmaxembedding 값을 고정시키지 않고, 학습을 하면서 embedding값이 변경되는 learned embedding을 사용했습니다. 이때 input과 output은 같은 embedding layer를 사용합니다.또한 decoder output을 다음 token의 확률로 바꾸기 위해 learned linear transformation과 softmax function을 사용했습니다. learned linear transformation을 사용했다는 것은 decoder output에 weight matrix W<math>W</math>를 곱해주는데, 이때 W<math>W</math>가 학습된다는 것입니다.Attentionattention은 단어의 의미처럼 특정 정보에 좀 더 주의를 기울이는 것입니다.예를 들어 model이 수행해야 하는 task가 번역이라고 해봅시다. source는 영어이고 target은 한국어입니다. “Hi, my name is poza.”라는 문장과 대응되는 “안녕, 내 이름은 포자야.”라는 문장이 있습니다. model이 이름은이라는 token을 decode할 때, source에서 가장 중요한 것은 name입니다.그렇다면, source의 모든 token이 비슷한 중요도를 갖기 보다는 name이 더 큰 중요도를 가지면 되겠죠. 이때, 더 큰 중요도를 갖게 만드는 방법이 바로 attention입니다.Scaled Dot-Product Attention해당 논문의 attention을 Scaled Dot-Product Attention이라고 부릅니다. 수식을 살펴보면 이렇게 부르는 이유를 알 수 있습니다.Attention(Q,K,V)=softmax(QKT√dk)V<math>Attention(Q,K,V)=softmax(QKTdk)V</math>먼저 input은 dk<math>dk</math> dimension의 query와 key들, dv<math>dv</math> dimension의 value들로 이루어져 있습니다.이때 모든 query와 key에 대한 dot-product를 계산하고 각각을 √dk<math>dk</math>로 나누어줍니다. dot-product를 하고 √dk<math>dk</math>로 scaling을 해주기 때문에 Scaled Dot-Product Attention인 것입니다. 그리고 여기에 softmax를 적용해 value들에 대한 weights를 얻어냅니다.key와 value는 attention이 이루어지는 위치에 상관없이 같은 값을 갖게 됩니다. 이때 query와 key에 대한 dot-product를 계산하면 각각의 query와 key 사이의 유사도를 구할 수 있게 됩니다. 흔히 들어본 cosine similarity는 dot-product에서 vector의 magnitude로 나눈 것입니다. √dk<math>dk</math>로 scaling을 해주는 이유는 dot-products의 값이 커질수록 softmax 함수에서 기울기의 변화가 거의 없는 부분으로 가기 때문입니다.softmax를 거친 값을 value에 곱해준다면, query와 유사한 value일수록, 즉 중요한 value일수록 더 높은 값을 가지게 됩니다. 중요한 정보에 더 관심을 둔다는 attention의 원리에 알맞은 것입니다.Multi-Head Attention위의 그림을 수식으로 나타내면 다음과 같습니다.MultiHead(Q,K,V)=Concat(head1,...,headh)WO<math>MultiHead(Q,K,V)=Concat(head1,...,headh)WO</math>where headi=Attention(QWQi,KWKi,VWVi)dmodel<math>dmodel</math> dimension의 key, value, query들로 하나의 attention을 수행하는 대신 key, value, query들에 각각 다른 학습된 linear projection을 h번 수행하는 게 더 좋다고 합니다. 즉, 동일한 Q,K,V<math>Q,K,V</math>에 각각 다른 weight matrix W<math>W</math>를 곱해주는 것이죠. 이때 parameter matrix는 WQi∈Rdmodelxdk,WKi∈Rdmodelxdk,WVi∈Rdmodelxdv,WOi∈Rhdvxdmodel<math>WiQ∈Rdmodelxdk,WiK∈Rdmodelxdk,WiV∈Rdmodelxdv,WiO∈Rhdvxdmodel</math>입니다.순서대로 query, key, value, output에 대한 parameter matrix입니다. projection이라고 하는 이유는 각각의 값들이 parameter matrix와 곱해졌을 때 dk,dv,dmodel<math>dk,dv,dmodel</math>차원으로 project되기 때문입니다. 논문에서는 dk=dv=dmodel/h<math>dk=dv=dmodel/h</math>를 사용했는데 꼭 dk<math>dk</math>와 dv<math>dv</math>가 같을 필요는 없습니다.이렇게 project된 key, value, query들은 병렬적으로 attention function을 거쳐 dv<math>dv</math>dimension output 값으로 나오게 됩니다.그 다음 여러 개의 head<math>head</math>를 concatenate하고 다시 projection을 수행합니다. 그래서 최종적인 dmodel<math>dmodel</math> dimension output 값이 나오게 되는거죠.각각의 과정에서 dimension을 표현하면 아래와 같습니다.*dQ,dK,dV<math>dQ,dK,dV</math>는 각각 query, key, value 개수Self-Attentionencoder self-attention layerkey, value, query들은 모두 encoder의 이전 layer의 output에서 옵니다. 따라서 이전 layer의 모든 position에 attention을 줄 수 있습니다. 만약 첫번째 layer라면 positional encoding이 더해진 input embedding이 됩니다.decoder self-attention layerencoder와 비슷하게 decoder에서도 self-attention을 줄 수 있습니다. 하지만 i<math>i</math>번째 output을 다시 i+1<math>i+1</math>번째 input으로 사용하는 auto-regressive한 특성을 유지하기 위해 , masking out된 scaled dot-product attention을 적용했습니다.masking out이 됐다는 것은 i<math>i</math>번째 position에 대한 attention을 얻을 때, i<math>i</math>번째 이후에 있는 모든 position은 Attention(Q,K,V)=softmax(QKT√dk)V<math>Attention(Q,K,V)=softmax(QKTdk)V</math>에서 softmax의 input 값을 −∞<math>−∞</math>로 설정한 것입니다. 이렇게 한다면, i<math>i</math>번째 이후에 있는 position에 attention을 주는 경우가 없겠죠.Encoder-Decoder Attention Layerquery들은 이전 decoder layer에서 오고 key와 value들은 encoder의 output에서 오게 됩니다. 그래서 decoder의 모든 position에서 input sequence 즉, encoder output의 모든 position에 attention을 줄 수 있게 됩니다.query가 decoder layer의 output인 이유는 query라는 것이 조건에 해당하기 때문입니다. 좀 더 풀어서 설명하면, ‘지금 decoder에서 이런 값이 나왔는데 무엇이 output이 돼야 할까?’가 query인 것이죠.이때 query는 이미 이전 layer에서 masking out됐으므로, i번째 position까지만 attention을 얻게 됩니다.이 같은 과정은 sequence-to-sequence의 전형적인 encoder-decoder mechanisms를 따라한 것입니다.*모든 position에서 attention을 줄 수 있다는 게 이해가 안되면 링크를 참고하시기 바랍니다.Position-wise Feed-Forward Networksencoder와 decoder의 각각의 layer는 아래와 같은 fully connected feed-forward network를 포함하고 있습니다.position 마다, 즉 개별 단어마다 적용되기 때문에 position-wise입니다. network는 두 번의 linear transformation과 activation function ReLU로 이루어져 있습니다.FFN(x)=max(0,xW1+b1)W2+b2x<math>x</math>에 linear transformation을 적용한 뒤, ReLU(max(0,z))<math>ReLU(max(0,z))</math>를 거쳐 다시 한번 linear transformation을 적용합니다.이때 각각의 position마다 같은 parameter W,b<math>W,b</math>를 사용하지만, layer가 달라지면 다른 parameter를 사용합니다.kernel size가 1이고 channel이 layer인 convolution을 두 번 수행한 것으로도 위 과정을 이해할 수 있습니다.Positional Encodingtransfomer는 recurrence도 아니고 convolution도 아니기 때문에, 단어의sequence를 이용하기 위해서는 단어의 position에 대한 정보를 추가해줄 필요가 있었습니다.그래서 encoder와 decoder의 input embedding에 positional encoding을 더해줬습니다.positional encoding은 dmodel<math>dmodel</math>(embedding 차원)과 같은 차원을 갖기 때문에 positional encoding vector와 embedding vector는 더해질 수 있습니다.논문에서는 다른 *frequency를 가지는 sine과 cosine 함수를 이용했습니다.*주어진 구간내에서 완료되는 cycle의 개수PE(pos,2i)=sin(pos/100002i/dmodel)<math>PE(pos,2i)=sin(pos/100002i/dmodel)</math>PE(pos,2i+1)=cos(pos/100002i/dmodel)<math>PE(pos,2i+1)=cos(pos/100002i/dmodel)</math>pos<math>pos</math>는 position ,i<math>i</math>는 dimension 이고 주기가 100002i/dmodel⋅2π<math>100002i/dmodel⋅2π</math>인 삼각 함수입니다. 즉, pos<math>pos</math>는 sequence에서 단어의 위치이고 해당 단어는 i<math>i</math>에 0부터 dmodel2<math>dmodel2</math>까지를 대입해 dmodel<math>dmodel</math>차원의 positional encoding vector를 얻게 됩니다. k=2i+1<math>k=2i+1</math>일 때는 cosine 함수를, k=2i<math>k=2i</math>일 때는 sine 함수를 이용합니다. 이렇게 positional encoding vector를 pos<math>pos</math>마다 구한다면 비록 같은 column이라고 할지라도 pos<math>pos</math>가 다르다면 다른 값을 가지게 됩니다. 즉, pos<math>pos</math>마다 다른 pos<math>pos</math>와 구분되는 positional encoding 값을 얻게 되는 것입니다.PEpos=[cos(pos/1),sin(pos/100002/dmodel),cos(pos/10000)2/dmodel,...,sin(pos/10000)]<math>PEpos=[cos(pos/1),sin(pos/100002/dmodel),cos(pos/10000)2/dmodel,...,sin(pos/10000)]</math>이때 PEpos+k<math>PEpos+k</math>는 PEpos<math>PEpos</math>의 linear function으로 나타낼 수 있습니다. 표기를 간단히 하기 위해 c=100002idmodel<math>c=100002idmodel</math>라고 해봅시다. sin(a+b)=sin(a)cos(b)+cos(a)sin(b)<math>sin(a+b)=sin(a)cos(b)+cos(a)sin(b)</math>이고 cos(a+b)=cos(a)cos(b)−sin(a)sin(b)<math>cos(a+b)=cos(a)cos(b)−sin(a)sin(b)</math> 이므로 다음이 성립합니다.PE(pos,2i)=sin(posc)<math>PE(pos,2i)=sin(posc)</math>PE(pos,2i+1)=cos(posc)<math>PE(pos,2i+1)=cos(posc)</math>PE(pos+k,2i)=sin(pos+kc)=sin(posc)cos(kc)+cos(posc)sin(kc)=PE(pos,2i)cos(kc)+cos(posc)sin(kc)<math>PE(pos+k,2i)=sin(pos+kc)=sin(posc)cos(kc)+cos(posc)sin(kc)=PE(pos,2i)cos(kc)+cos(posc)sin(kc)</math>PE(pos+k,2i+1)=cos(pos+kc)=cos(posc)cos(kc)−sin(posc)sin(kc)=PE(pos,2i+1)cos(kc)−sin(posc)sin(kc)<math>PE(pos+k,2i+1)=cos(pos+kc)=cos(posc)cos(kc)−sin(posc)sin(kc)=PE(pos,2i+1)cos(kc)−sin(posc)sin(kc)</math>이런 성질 때문에 model이 relative position에 의해 attention하는 것을 더 쉽게 배울 수 있습니다.논문에서는 학습된 positional embedding 대신 sinusoidal version을 선택했습니다. 만약 학습된 positional embedding을 사용할 경우 training보다 더 긴 sequence가 inference시에 입력으로 들어온다면 문제가 되지만 sinusoidal의 경우 constant하기 때문에 문제가 되지 않습니다. 그냥 좀 더 많은 값을 계산하기만 하면 되는거죠.Trainingtraining에 사용된 기법들을 알아보겠습니다.Optimizer많이 쓰이는 Adam optimizer를 사용했습니다.특이한 점은 learning rate를 training동안 고정시키지 않고 다음 식에 따라 변화시켰다는 것입니다.lrate=d−0.5model⋅min(step_num−0.5,step_num⋅warmup_steps−1.5)warmup_step<math>warmup_step</math>까지는 linear하게 learning rate를 증가시키다가, warmup_step<math>warmup_step</math> 이후에는 step_num<math>step_num</math>의 inverse square root에 비례하도록 감소시킵니다.이렇게 하는 이유는 처음에는 학습이 잘 되지 않은 상태이므로 learning rate를 빠르게 증가시켜 변화를 크게 주다가, 학습이 꽤 됐을 시점에 learning rate를 천천히 감소시켜 변화를 작게 주기 위해서입니다.RegularizationResidual ConnectionIdentity Mappings in Deep Residual Networks라는 논문에서 제시된 방법이고, 아래의 수식이 residual connection을 나타낸 것입니다.yl=h(xl)+F(xl,Wl)<math>yl=h(xl)+F(xl,Wl)</math>xl+1=f(yl)<math>xl+1=f(yl)</math>이때 h(xl)=xl<math>h(xl)=xl</math>입니다. 논문 제목에서 나온 것처럼 identity mapping을 해주는 것이죠.특정한 위치에서의 xL<math>xL</math>을 다음과 같이 xl<math>xl</math>과 residual 함수의 합으로 표시할 수 있습니다.x2=x1+F(x1,W1)<math>x2=x1+F(x1,W1)</math>x3=x2+F(x2,W2)=x1+F(x1,W1)+F(x2,W2)<math>x3=x2+F(x2,W2)=x1+F(x1,W1)+F(x2,W2)</math>xL=xl+L−1∑i=1F(xi,Wi)<math>xL=xl+∑i=1L−1F(xi,Wi)</math>그리고 미분을 한다면 다음과 같이 됩니다.σϵσxl=σϵσxLσxLσxl=σϵσxL(1+σσxlL−1∑i=1F(xi,Wi))<math>σϵσxl=σϵσxLσxLσxl=σϵσxL(1+σσxl∑i=1L−1F(xi,Wi))</math>이때, σϵσxL<math>σϵσxL</math>은 상위 layer의 gradient 값이 변하지 않고 그대로 하위 layer에 전달되는 것을 보여줍니다. 즉, layer를 거칠수록 gradient가 사라지는 vanishing gradient 문제를 완화해주는 것입니다.또한 forward path나 backward path를 간단하게 표현할 수 있게 됩니다.Layer NormalizationLayer Normalization이라는 논문에서 제시된 방법입니다.μl=1HH∑i=1ali<math>μl=1H∑i=1Hail</math>σl= ⎷1HH∑i=1(ali−μl)2<math>σl=1H∑i=1H(ail−μl)2</math>같은 layer에 있는 모든 hidden unit은 동일한 μ<math>μ</math>와 σ<math>σ</math>를 공유합니다.그리고 현재 input xt<math>xt</math>, 이전의 hidden state ht−1<math>ht−1</math>, at=Whhht−1+Wxhxt<math>at=Whhht−1+Wxhxt</math>, parameter g,b<math>g,b</math>가 있을 때 다음과 같이 normalization을 해줍니다.ht=f[gσt⊙(at−μt)+b]<math>ht=f[gσt⊙(at−μt)+b]</math>이렇게 한다면, gradient가 exploding하거나 vanishing하는 문제를 완화시키고 gradient 값이 안정적인 값을 가짐로 더 빨리 학습을 시킬 수 있습니다.(논문에서 recurrent를 기준으로 설명했으므로 이에 따랐습니다.)DropoutDropout: a simple way to prevent neural networks from overfitting라는 논문에서 제시된 방법입니다.dropout이라는 용어는 neural network에서 unit들을 dropout하는 것을 가리킵니다. 즉, 해당 unit을 network에서 일시적으로 제거하는 것입니다. 그래서 다른 unit과의 모든 connection이 사라지게 됩니다. 어떤 unit을 dropout할지는 random하게 정합니다.dropout은 training data에 overfitting되는 문제를 어느정도 막아줍니다. dropout된 unit들은 training되지 않는 것이니 training data에 값이 조정되지 않기 때문입니다.Label SmoothingRethinking the inception architecture for computer vision라는 논문에서 제시된 방법입니다.training동안 실제 정답인 label의 logit은 다른 logit보다 훨씬 큰 값을 갖게 됩니다. 이렇게 해서 model이 주어진 input x<math>x</math>에 대한 label y<math>y</math>를 맞추는 것이죠.하지만 이렇게 된다면 문제가 발생합니다. overfitting될 수도 있고 가장 큰 logit을 가지는 것과 나머지 사이의 차이를 점점 크게 만들어버립니다. 결국 model이 다른 data에 적응하는 능력을 감소시킵니다.model이 덜 confident하게 만들기 위해, label distribution q(k∣x)=δk,y<math>q(k∣x)=δk,y</math>를 (k가 y일 경우 1, 나머지는 0) 다음과 같이 대체할 수 있습니다.q′(k|x)=(1−ϵ)δk,y+ϵu(k)<math>q′(k|x)=(1−ϵ)δk,y+ϵu(k)</math>각각 label에 대한 분포 u(k)<math>u(k)</math>, smooting parameter ϵ<math>ϵ</math>입니다. 위와 같다면, k=y인 경우에도 model은 p(y∣x)=1<math>p(y∣x)=1</math>이 아니라 p(y∣x)=(1−ϵ)<math>p(y∣x)=(1−ϵ)</math>이 되겠죠. 100%의 확신이 아닌 그보다 덜한 확신을 하게 되는 것입니다.Conclusiontransformer는 recurrence를 이용하지 않고도 빠르고 정확하게 sequential data를 처리할 수 있는 model로 제시되었습니다.여러가지 기법이 사용됐지만, 가장 핵심적인 것은 encoder와 decoder에서 attention을 통해 query와 가장 밀접한 연관성을 가지는 value를 강조할 수 있고 병렬화가 가능해진 것입니다.Referencehttp://www.whydsp.org/280http://mlexplained.com/2017/12/29/attention-is-all-you-need-explained/http://openresearch.ai/t/identity-mappings-in-deep-residual-networks/47https://m.blog.naver.com/PostView.nhn?blogId=laonple&logNo=220793640991&proxyReferer=https://www.google.co.kr/https://www.researchgate.net/figure/Sample-of-a-feed-forward-neural-network_fig1_234055177https://arxiv.org/abs/1603.05027https://arxiv.org/abs/1607.06450http://jmlr.org/papers/volume15/srivastava14a.old/srivastava14a.pdfhttps://arxiv.org/pdf/1512.00567.pdf
조회수 1750

스타트업의 HR 고민..

서비스를 런칭하면서 필요한 고민들에 대해서 계속 포스팅하는 중입니다. 지난번에는 [영업]에 대한 고민이었고, 그전에는 startup을 만들어가는 과정에 대한 전반적인 고민이었구요.. 앞으로 마케팅, 브랜딩, 재무 등등에 대한 의견을 계속해서 올릴 예정입니다.---시작---런칭을 하고 첫 출고를 해보니.. 이제 함께 할 사람들이 더 필요하다는 것을 느낀다.사실 진작부터 더 필요하였으나, 함께할 사람을 찾는데 있어 꽤나 신중하게 접근을 하고 있기 때문에 시간이 더 걸릴 것으로 생각되는데.. 또 마냥 기다릴 수 만은 없는일..!Paffem은 100억의 목표 매출을 10명의 사람들로써 만들어가겠다는 목표를 가지고 있다. (출고 시점에 도와줄 인력 제외)그 이상의 사람들이 모이면, 경험상 서로 편가르기가 생기고 일을 미루는 상황들이 어쩔 수 없이 만들어진다. 그래서 1,000억짜리 한개를 만드는 것보다는 10명이 만드는 100억짜리 비즈니스를 여러개 만드는 것이 목표다.암튼... 예전부터 생각하던, 함께할 사람들은 어떤 기준에 부합해야 하는가에 대해서 정리를 하기 시작했다. (계속 업데이트 예정)1. 본인의 영역에서 매달 한번의 blog posting!새로운 트렌드에 항상 노출되어 고민하고 그 결과를 정리해서 남겨야 한다라는 생각  블로그 하나 쓰다보면 고민을 할 수 밖에 없고, 그러면서 발전한다는 생각이다.   물론 숙제검사 따위는 없다.   2. 스스로 고민해서 일을 만들어가고 해결해나가는 역량저 오늘 일 없는데요? 라는 것은 사실 말이안된다... 모든 일에는 지금보다 발전할 가능성이 있는데 그것을 안보거나.. 혹은 못 보는 것이다.     매번 이 일을 해라 저 일을 해라라고 해줄수는 없는법.. 스스로 찾아가야 한다. 그래서 개인적으로 난 이제 사회생활을 시작한 junior를 선호하지는 않는다.   3. 눈에 보이지 않아도 열심히 하고 있다는 믿음의심의 눈초리를 두고 싶지 않다. 그렇게 하는게 서로 피곤하다는 것을 알기 때문에..   오전에 사무실에 나오지 않았다면 외부 미팅을 하거나.. 혹은 어제 너무 늦게까지 일해서 쉬는 것으로 생각할 만한 믿음을 줄 수 있는 사람이 필요하다.4. 항상 새로운 것에 관심을 갖는 성향파펨은 매일 30분~1시간 홍대 산책을 나간다. 현재 사무실이 지하라서 광합성을 해야 하는 이유도 있지만, 홍대를 구경하다 보면 새로운 것들에 계속해서 노출이 된다.   그것을 해석하고 또 파펨에 적용해볼 아이디어로 고민해 보는 것이 이런 산책의 목적이다. (물론 그냥 쇼핑할 때도 많다 ^^;;)운영상의 몇가지 사항..1. 파펨은 9:30 출근, 6:30 퇴근! 불필요한 야근은 없다!!근무시간에 일하자.. 엄한 미팅들 한다고 시간 보내고 인터넷 한다고 시간보내지 말고..   출근 ~ 퇴근 시간에 집중해서 일하면 피곤해서 더 일하고 싶어도 못한다. 쉬어야지!  퇴근하면 그냥 머리속으로만 고민하는 거다.. 내일 할일에 대한 준비도 머리로만 하고..   단, 고객과의 약속 (출고 등) 을 위해서는 야근을 하는 것으로 예외  2. 모두가 동의해야 입사 가능내가 paffem의 1호 이고, 2호인 art director는 내가 100% 동의 했기 때문에 파펨에 들어올 수 있었다. 3호는 우리 CTO님, 그렇다면 4호는 1&2&3호의 동의가 필요하고.. 10호는 1~9호 전체의 동의가 필요    맘에 안드는 사람하고 일하는 것은 굉장히 피곤한 일이다. 맘에 안들것 같으면.. 뽑을 때 부터 동의하면 안되는 것이다.     10명이 열심히 일해도 할일이 많다... 쓸데없는 감정싸움 따위 할 시간이 없다.   3. 기여했다면 보상한다.회사가 성장하는 것에 따라 급여도 단계적으로 성장하도록 할 것이다.   나만 좋으라고 하는 회사가 아니다.. 최선을 다했고 기여한 바가 있다면 그만큼의 보상이 따라야 한다. 업계 최고의 compensation 을 만들어 주겠다는 다짐을 한다.4. 보고서는 조직의 다른 구성원의 설득을 위해 작성한다.보고서 만드느라 들어가는 시간이 얼마나 아까운지는 만들어봐야 안다. 윗사람의 취향, 회사의 템플릿 등등을 맞추느라 정작 중요한 이야기에 대한 고민하는 시간은 짧아진다. 파펨에서는 10명의 구성원들을 설득하기 위한 보고서를 작성하며 max5장까지로 제한을 둘 예정. 보고서 tool은 본인이 가장 편한것으로.. ppt, photoshop, excel 등등5. 최종 의사결정은 어쩔 수 없이 CEO의 몫대표는 다른 구성원들의 고민보다는 고민의 폭이 넓을 수 밖에 없다. 구성원들은 좀 더 깊이를 가져야하지만, 대표는 전반적으로 또한 균형감을 가져야 한다. 당연히 많은 정보를 듣고, 또한 회사 전반에 대한 균형감을 가지기 때문에 최종 의사결정권은 대표가 가져야한다. 만약 그것을 설득하겠다면 4번의 보고서를 잘 만드는 것이 핵심!!#파펨 #스타트업 #창업가 #창업자 #마인드셋 #인사이트 #고민 #HR #팀빌딩
조회수 59

바로고에만 있는 특별함, 바로고 '브런치데이'

barogo바로고의 사내 소식을 전해드립니다.바로고는 임직원과 함께 하는다양한 이벤트들이 마련되어 있습니다.이번에 진행한 이벤트는바로브런치데이정신없이 후다닥~ 출근해서약간의 배고픔을 참고 일하는 바로고의 직원들을 위해브런치데이를 마련하였답니다.모두들 다 같이 아침 인사도 나누고함께 브런치도 즐기는아주 즐거운 시간이것이 바로바로고의 직원 복지!그 현장을 지금 만나봅니다~^^바로고브런치데이오늘의 메뉴샌드위치파니니감자튀김아메리카노취향에 따라 골라 먹을 수 있는클럽샌드위치햄치즈파니니모짜렐라 토마토 파니니감자튀김그리고 아메리카노는뜨겁게! 혹은 차갑게!취향 따라입맛 따라골라 먹을 수 있는바로고의 브런치데이 입니다.배가 고팠던 우리 바로고의 직원들이하나둘씩 모이기 시작합니다.눈길을 뗄 수 없는샌드위치를 향한 시선!이렇게 함께 모여브런치를 즐기는바로고의 분위기 훈훈함 그 자체~함께 먹으면 더욱 맛있는브런치 타임!정신없는 업무시간에 할 수 없었던정겨운 대화들도 오고 가며즐거운 시간을 가집니다.지금부터는 본격 먹방 시작!재빠른 속도로테이블의 음식들이 사라져 가고 있어요!먹는 것 하나는어딜가도 빠지지 않는 바로고의 직원들이랍니다."먹는거 하나는 빠지지 않는다"브런치 타임이 끝나갑니다.아쉬운 마음을 뒤로하고다음 브런치데이를 기다려봅니다."이런 시간 자주자주 있었으면 좋겠습니다."대표님~^^ 하고 살짝쿵마음을 전해봅니다.바로고의 직원끼리 이렇게 소통하고 함께 하는 시간너무너무 좋은 것 같아요! 굿굿! goodgood!바로고브런치데이바로고는소통과 공감의 시간을 통해업무 효율을 높이고서로의 친목도 다지는의미 있는 사내 복지를 진행합니다.바로고의 사내소식앞으로도 기대해주세요!감사합니다.

기업문화 엿볼 때, 더팀스

로그인

/