본문 바로가기

Tech

(556)
[CS] 어떤 것들이 컴퓨터 하드웨어를 구성할까? 컴퓨터 내부 구조 🔊 해당 포스팅은 CS 서적 '한 권으로 읽는 컴퓨터 구조와 프로그래밍'을 읽고 저만의 방식으로 정리, 요약하는 글임을 알립니다. 해당 내용은 '한 권으로 읽는 컴퓨터 구조와 프로그래밍' 서적에 기반하였음을 알립니다. 이전 포스팅까지 비트의 특성과 이 비트를 활용하는 방법에 대해 배웠고, 또 비트를 사용하는 이유와 조합 논리, 순차 논리를 활용해서 하드웨어를 구성하는 방법에 대해서도 배워보았다. 이번 포스팅에서는 현대적으로 사용되는 컴퓨터 하드웨어가 어떤 부분으로 구성되어 있는지 알아본다. 1. 컴퓨터를 구성하는 3가지! 메모리, 입력/출력, CPU 현대적 컴퓨터는 크게 메모리, 입력/출력(I/O라고도 함), CPU(중앙처리장치) 3가지 부분으로 구성되어 있다고 할 수 있다. 이 3가지 요소들은 서로 깊..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 미분 자동 계산(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 최근에 밑바닥부터 시작하는 딥러닝 1,2권을 깊숙하게 공부해보면서 부끄럽지만 나의 부족한 실력을 많이 채워나갈 수 있었다. 그리고 이번에는 실력을 좀 더 발전시키기 위해 해당 책 시리즈 3권을 천천히, 최대한 깊숙하게 공부해 보기로 결심했다. 참고로 3권도 마찬가지로 시중에 공개된 딥러닝 프레임워크인 Tensorflow, Pytorch 등과 같은 라이브러리를 사용해서 공부하는 내용은 아니다. 1,2권처럼 순수하게 파이썬과 넘파이만을 활용하게 되는데, 이..
[CS] 컴퓨터는 어떻게 비트를 기억할까? 메모리와 디스크의 핵심인 순차 논리 🔊 해당 포스팅은 CS 서적 '한 권으로 읽는 컴퓨터 구조와 프로그래밍'을 읽고 저만의 방식으로 정리, 요약하는 글임을 알립니다. 해당 내용은 '한 권으로 읽는 컴퓨터 구조와 프로그래밍' 서적에 기반하였음을 알립니다. 이번 포스팅에서는 조합 논리의 한계점 즉, 어떤 값을 기억할 수 없다는 점을 해결할 수 있는 순차 논리에 대해 배워보도록 하자. 글 제목처럼 순차 논리는 흔히 우리가 데이터를 저장하는 기능을 한다고 알고 있는 컴퓨터의 '메모리' 와 '디스크'의 핵심 요소이다. 순차 논리의 '순차'는 순서(Sequence) 라는 용어에서 비롯되었다. 순서라는 것은 시간적으로 어떤 값 뒤에 오는 다른 값을 의미한다. 그런데 컴퓨터는 사람처럼 '시간'이라는 요소를 태생적으로는 인지하지 못한다. 따라서 어떤 회로..
[CS] 컴퓨터는 어떤 논리로 비트를 다룰까? 전자 회로의 조합 논리 🔊 해당 포스팅은 CS 서적 '한 권으로 읽는 컴퓨터 구조와 프로그래밍'을 읽고 저만의 방식으로 정리, 요약하는 글임을 알립니다. 해당 내용은 '한 권으로 읽는 컴퓨터 구조와 프로그래밍' 서적에 기반하였음을 알립니다. 저번 첫 포스팅에서 컴퓨터는 '비트'라는 일종의 언어를 사용해서 말을 한다는 것을 알아보았다. 이번 포스팅에서는 그렇다면 컴퓨터가 대체 '왜' 비트라는 언어를 사용하는지에 대해서 전자 회로 관점에서 살펴보고자 한다. 1. 디지털 컴퓨터의 사례 과거 먼 옛날에는 톱니바퀴를 사용해서 연산을 수행하는 계산기를 발명했었다. 또한 시간이 흐름에 따라 톱니바퀴를 사용하지 않는 기계식 컴퓨터로는 계산자(Slide rule)라는 것도 발명되었다. 계산자의 기본 기능은 로그 곱셈 공식을 이용해 만들었다. ..
[PySpark] Spark로 Encoding 과 Scaling 을 수행해보자! 🔊 해당 포스팅은 스파크 완벽 가이드 책과 인프런의 스파크 머신러닝 완벽 가이드 강의로 공부한 후 배운 내용을 저만의 방식으로 재구성한 것임을 알립니다. 특히, 참고한 인프런 강의의 강의 자료를 그대로 사용하지 않았음을 필히 알립니다! 이번 포스팅에서는 문자열 또는 Object 타입의 값을 숫자로 '인코딩' 해주는 기법들인 레이블 인코딩(Label Encoding)과 원-핫 인코딩(One-Hot Encoding)을 스파크로 수행하는 방법에 대해서 알아보도록 하자. 그리고 실수형 형태의 값들을 스케일링 해주는 방법에 대해서도 배워보자. 1. 문자열을 인덱스(숫자)로, StringToIndexer 사이킷런에 익숙한 분들은 레이블 인코딩을 수행한다고 하면 LabelEncoder 클래스나 OrdinalEncod..
[PySpark] Spark로 교차검증, 파라미터 튜닝을 해보자! 🔊 해당 포스팅은 스파크 완벽 가이드 책과 인프런의 스파크 머신러닝 완벽 가이드 강의로 공부한 후 배운 내용을 저만의 방식으로 재구성한 것임을 알립니다. 특히, 참고한 인프런 강의의 강의 자료를 그대로 사용하지 않았음을 필히 알립니다! 이번 포스팅에서는 스파크를 활용해서 모델의 교차검증을 수행하고 모델의 하이퍼파라미터를 튜닝을 함께 수행하는 방법에 대해 알아보자. 그리고 더 나아가 교차검증과 파라미터 튜닝 과정을 저번 포스팅에서 배운 Pipeline을 활용해 수행하는 방법도 알아보도록 하자. 1. 교차검증과 파라미터 튜닝을 동시에, CrossValidator 스파크의 CrossValidator 클래스는 교차검증과 파라미터 튜닝을 동시에 수행할 수 있도록 한다. 여기서 '교차검증'이란 K-fold 교차검증..
[CS] 컴퓨터는 어떤 말을 사용할까? 컴퓨터의 언어체계 🔊 해당 포스팅은 CS 서적 '한 권으로 읽는 컴퓨터 구조와 프로그래밍'을 읽고 저만의 방식으로 정리, 요약하는 글임을 알립니다. 해당 내용은 '한 권으로 읽는 컴퓨터 구조와 프로그래밍' 서적에 기반하였음을 알립니다. 이번 포스팅부터 CS(Computer Science) 지식을 습득하기 위해 '한 권으로 읽는 컴퓨터 구조와 프로그래밍' 이라는 책을 한 챕터씩 읽고 배운 내용을 리뷰, 요약하는 시리즈를 만들어보려고 한다. 수호님과 스터디를 2주에 한번씩 진행하고자 약속을 잡고 정말 오랜만에 누군가와의 스터디를 진행하기 시작했다. 최근에 한 기업의 인턴으로 짧게 근무하면서 내 자신에 대한 CS 지식의 부족함을 처절히 느꼈고 물론 당장 CS 지식을 직접적으로 사용하지 않을 수도 있지만 필자도 컴퓨터를 사용하여..
[PySpark] Spark의 Pipeline으로 분류 모델을 만들어보자! 🔊 해당 포스팅은 스파크 완벽 가이드 책과 인프런의 스파크 머신러닝 완벽 가이드 강의로 공부한 후 배운 내용을 저만의 방식으로 재구성한 것임을 알립니다. 특히, 참고한 인프런 강의의 강의 자료를 그대로 사용하지 않았음을 필히 알립니다! 이번 포스팅에서는 PySpark를 활용해서 간단한 머신러닝 분류 모델을 만들어보도록 하자. 그리고 분류 모델을 만드는 데 거치는 여러가지 과정을 하나의 파이프라인으로 만들 수 있는 PySpark의 Pipeline을 활용해보는 방법도 알아보도록 하자. 1. PySpark로 간단한 Multi-Class 분류 모델 만들기 해당 포스팅에서는 대표적인 벤치마크 데이터인 IRIS(붓꽃) 데이터를 활용한 멀티-클래스 분류 모델을 만들어보자. 우선 아래의 Scikit-learn 모듈을 ..
[PySpark] Spark의 Dataframe API를 알아보자!(2) 🔊 해당 포스팅은 스파크 완벽 가이드 책과 인프런의 스파크 머신러닝 완벽 가이드 강의로 공부한 후 배운 내용을 저만의 방식으로 재구성한 것임을 알립니다. 특히, 참고한 인프런 강의의 강의 자료를 그대로 사용하지 않았음을 필히 알립니다! 저번 포스팅에 이어 PySpark의 dataframe API 사용 방법에 대해 연이어 알아보자. 1. 조건에 맞는 데이터만 추출하기 특정 조건에 맞는 데이터를 추출하기 위해 사용하는 메소드로는 filter() 메소드가 존재한다. 이 때, filter() 메소드에는 스파크 데이터프레임의 Column Type 객체를 넣어주어야 한다. 여기서 Column Type 객체란게 잘 와닿지 않을 텐데, 우리가 저번 시간에 select() 메소드를 활용해서 특정 칼럼을 추출할 때, 아래..
[PySpark] Spark의 Dataframe API를 알아보자!(1) 🔊 해당 포스팅은 스파크 완벽 가이드 책과 인프런의 스파크 머신러닝 완벽 가이드 강의로 공부한 후 배운 내용을 저만의 방식으로 재구성한 것임을 알립니다. 특히, 참고한 인프런 강의의 강의 자료를 그대로 사용하지 않았음을 필히 알립니다! 예전에 아파치 스파크에 대한 개념글과 PySpark를 활용해서 문제 유형에 맞게 간단한 머신러닝 모델을 튜토리얼 형식으로 배웠었다. 그 이후 어느 정도 시간이 지난 후, 아파치 스파크의 버전도 많이 업데이트 되었고 개인적으로 분산 시스템에 대한 역량을 키워보고자 책과 강의를 통해 PySpark를 다시 배우고 있다. 필자는 PySpark를 활용하는 목적이 대량의 데이터를 전처리하고 머신러닝 모델을 개발하는 방법을 배워보는 것임을 알린다. 그래서 이번 첫 포스팅에서 알아볼 P..
[밑시딥] Transformer 동작과정을 밑바닥부터 뜯어보자! 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권 책에 나오진 않지만 책의 개념을 기반해 작성함을 알립니다. 또한 Transformer의 동작과정을 자세하게 이해하는 데 큰 참조 자료가 된 원본 블로그 출처는 여기임을 알립니다. - 아래 그림 자료에서 '아다마르 곱'을 사용해도 된다고 나와있지만 오타임을 알립니다! 행렬 내적(Matmul 또는 dot)을 수행해주어야 합니다! 저번 포스팅에서는 Transformer 라는 모델이 등장하게 된 이유과 모델의 큰 구조를 그림으로 살펴면서 각 구성요소가 어떠한 역할을 했는지도 알아보았다. 아쉬웠던 점은 트랜스포머라는 모델이 $key, query, value$라는 것을 입력으로 받는다고 했는데, 구체적으로 이 입력들이 무엇을 의미하는지, 그리고 트..
[밑시딥] RNN의 역할도 어텐션으로 대체한 seq2seq 모델, Transformer 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용의 마지막 챕터인 Transformer에 대해 간단히 소개하는 개념과 더불어 Transformer 논문인 "Attention Is All You Need"를 읽고 개인적으로 요약 및 정리한 글임을 알립니다. 본격 내용에 들어가기에 앞서 앞으로 Transformer(트랜스포머)에 대한 내용을 2개의 포스팅으로 나누어 게시하려고 한다. 첫 번째인 이번 포스팅에서는 트랜스포머 모델 논문에 기반하여 트랜스포머 모델이 나오게 된 이유를 알아보고 개괄적인 모델 구조를 그림으로 살펴보면서 어떤 기법이 들어가있는지에 대해 집중적으로 다룬다. 그리고 다음 포스팅에서는 트랜스포머 모델의 '진짜' 구조를 그야말로 밑바닥부터 파헤쳐보도록 하자. 1. 거추장스러운 R..
[밑시딥] 어텐션을 적용한 seq2seq을 한층 더 응용해보자 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 저번 포스팅까지 해서 seq2seq 모델을 '크게' 개선하는 기법으로 어텐션(Attention)을 적용한 seq2seq 모델에 대해 알아보았다. 이번 포스팅은 밑시딥 2권의 마지막 포스팅으로 어텐션을 적용한 seq2seq 모델을 좀 더 응용할 수 있는 몇 가지 방법에 대해 알아보려고 한다. 1. Encoder의 RNN 계열 모델을 양방향(Bidire..
[회고] 2021년을 보내며 2020년 회고글을 쓴지가 엊그제 같은데 또 다시 1년이 흘렀다. 나이가 먹으면서 시간이 흐르는 속도가 같이 증가하는 느낌이다.(흑) 어쨌거나 1년이라는 시간이 흘렀고 그동안 내가 무엇을 했는지 돌아보는 회고글로 표현해보기로 했다. 1. 본격적인 취업준비의 시작 2021년 2월에 학부 졸업식을 한 후에 본가로 내려오면서 진정한 아름다운 백수가 아닌 백조의 생활을 시작했었다. 학교다닐 때는 전공 공부를 하랴 과제 하랴 여러가지 일 때문에 온전히 나만의 시간을 많이 확보하지 못했었는데, 이제 하루의 24시간 전체가 오로지 내 마음대로 사용할 수 있었다. 근데 자유를 얻은 대신 내가 앞으로 뭘 준비해야 하고 어떤 것을 공부해야 할지 주도적으로 계획을 세워야 한다는 것이 막막하기도 했었다. 그래서 그 때 뭐라도..
[밑시딥] seq2seq를 더 강력하게, 어텐션(Attention)을 적용한 seq2seq 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 저번 포스팅에서는 2개의 RNN을 이어 붙힌 seq2seq 모델에 대해 배웠다. seq2seq 모델은 각각 RNN으로 이루어져있는 Encoder, Decoder로 구성되어 있다는 것과 각 역할에 대해서도 알아보았다. 그리고 이 seq2seq 모델의 성능을 개선하는 2가지의 '작은' 기법으로서 입력 시퀀스(출발어)를 반전시켜 Encoder에 넣는 기법..
[프로그래머스] 순위 검색 문제설명 https://programmers.co.kr/learn/courses/30/lessons/72412
[프로그래머스] 예상 대진표 문제설명 https://programmers.co.kr/learn/courses/30/lessons/12985# 코딩테스트 연습 - 예상 대진표 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N programmers.co.kr 사고과정 특정한 자료구조나 알고리즘을 사용하는 문제보다는 규칙을 파악하는 문제인 듯 싶었다. 서로 인접한 번호끼리 묶은 후, 새로운 번호를 부여받는 것인데, 입력 예시로 규칙을 찾아보니, 각 원소가 2로 나누어떨어질 때, 떨어지지 않을 때에 따라 처리해주는 규칙을 찾은 후(소스코드에서 divide 함수) 이 규칙을 계속 적용하..
[프로그래머스] 게임 맵 최단거리 문제설명 https://programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr 사고과정 전형적인 BFS 유형 문제였다. 2차원 배열이 주어질 때, 특정 시작점에서 도착점까지의 최단거리 비용을 구하는 것이였다. 큐를 활용했고 방문 테이블을 따로 정의해주어서 방문 테이블을 방문 여부 체크와 거리 이동 칸 수를 계산하는 용으로 활용했다. 그리고 주어진 maps 테이블을 활용해서 벽인..
[밑시딥] RNN을 사용한 문장 생성, 그리고 RNN을 이어 붙인 seq2seq(Encoder-Decoder) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 저번 포스팅까지 해서 RNN에 게이트를 추가한 모델인 LSTM과 GRU에 대해 알아보았다. 또 이러한 RNN 계열 신경망을 활용해 다음에 나올 '단어'를 예측하는 언어 모델(LM, Language Model)의 성능을 개선하는 방법들에 대해서도 알아보았다. 이번 포스팅에서는 다음에 나올 '단어'만을 예측하는 것이 아닌 '문장'을 예측하는 언어 모델을..
[프로그래머스] 조이스틱 문제설명 https://programmers.co.kr/learn/courses/30/lessons/42860# 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다 programmers.co.kr 사고과정 그리디 문제인데, 상/하 방향, 좌/우 방향 두 개의 기준으로 각각 최소값을 갱신해야 했었다. 개인적으로 그리디 문제가 좀 체감이 많이 어렵다.. 마치 숨겨진 규칙을 찾는 느낌... 애써 풀어보려고 했지만 실패했다.. 구글링을 해서 다른 분의 좋은 풀이를 참고했다. 나는 주어진 문자열에서 모든 문자열을 A로 만드는 관점으로..