CS

CS/소프트웨어공학

[소프트웨어공학] 1. 소프트웨어 공학의 목적

소프트웨어 공학을 공부하는 이유소프트웨어 공학은 어떻게하면 좋은 소프트웨어를 빠르게 만들 수 있을지 고민하는 과정에서 등장했다.그리고 소프트웨어 엔지니어링 자체로 많은 사람들이 연구하고 있는 하나의 분야가 되었다. 그런데 하드웨어는 '하드웨어 공학' 이라는 말이 없다.하드웨어도 '좋은 하드웨어를 빠르게 만드는 방법' 과 같은 고민점이 있을 것 같은데, 왜 '하드웨어 공학'이라는 말이 없을까? 그건 소프트웨어와 하드웨어의 로직의 복잡도 차이 때문이다.규모가 매우 큰 소프트웨어는 코드 라인 숫자가 1~200만 줄이 넘어간다.그리고 그렇게 수많은 코드가 모여 동작하면서 아무런 문제가 없어야 한다.이건 엄청난 일이다. 반면 하드웨어는 정해진 공간 안에 회로를 설계해서 넣어야하다보니 논리적인 복잡도가 증가하는 한..

CS/기계학습심화

[기계학습심화] 3. 선형 회귀 & 경사하강법 구현

지금까지 정리한 내용을 다시 정리해보면, 기계학습은 주어진 데이터들을 잘 설명하는 함수(모델)를 찾는 것인데, 함수를 그냥 찾는 것이 쉽지 않아 그 형태를 정해주고, 해당 형태를 결정하는데 필요한 계수를 찾는 문제로 바꾸어 해결한다고 정리할 수 있다.이때, n차원 공간에 존재하는 데이터를 가장 잘 나타내는 n-1 차원의 직선 또는 하이퍼플레인을 찾는 것이 선형 회귀이다. 이때 '데이터를 가장 잘 나타내는 선형 모델'을 판단하는 기준은 주어진 데이터와 모델 사이의 오차의 합 (=Loss) 이 최소가 되는 모델이고, 선형 모델을 결정하는 변수 (W, b) 에 대한 Loss 값을 나타내는 Loss 함수에 대해 최소값을 찾는 문제로 바꾸어 생각할 수 있다.최소값을 찾는 제일 간단한 방법은 미분값이 0인 극소값을..

CS/기계학습심화

[기계학습심화] 2. 선형 회귀 & 경사하강법

지난 글에서 기계학습의 개요를 정리하면서, 기계학습은 입력 데이터의 분포를 잘 설명하는 함수(모델)를 찾는 과정이라고 정리하였다.이번 글에서는 가장 간단한 모델인 선형 회귀와 해당 모델을 학습시키는 경사 하강법에 대해서 정리해본다.  지난 글에서 본 것처럼 컴퓨터가 인식하는 '데이터'는 숫자의 묶음이다.이미지의 경우에는 RGB 3개 숫자 데이터의 2차원 묶음 (따라서 결과적으로는 3차원 배열) 이다.만약 이 이미지의 크기가 50 픽셀 x 50픽셀 이라면, 50 x 50 x 3 = 7500 개 숫자들의 배열이 된다.그리고 이 숫자들을 7500 x 1 크기의 행렬로도 표현할 수 있다. 이 행렬은 수학적으로 7500차원 좌표계 위에 있는 하나의 점으로 생각할 수 있다.또 다른 50픽셀 x 50픽셀 이미지들을 ..

CS/기계학습심화

[기계학습심화] 1. 기계학습 개요

“Machine learning is a branch of artificial intelligence (AI) and computer science which focuses on the use of data and algorithms to imitate the way that humans learn, gradually improving its accuracy.” 기계학습은 AI, 사람이 학습하는 방식을 모방하는 알고리즘과 대량의 데이터를 사용하여 정확도를 개선하는 컴퓨터 과학 분야의 한 갈래이다. 강의록에 나와있는 이 문장이 지금까지 배운 기계학습의 전부를 담고있다고 생각한다.3년전만해도 손글씨를 인식하는 모델은 새롭고 신기한 모델이었다. 실제로 대학교 2학년 때 주변에서 들었던 아이디어 중에 사람 손글..

CS/블록체인

[블록체인] 21. 이더리움 - 컨센서스

PoS 이더리움은 PoS 방식의 컨센서스를 사용한다.알고리즘은 다음과 같다. 1. 각 노드는 32ETH 를 미리 예치한다.2. 랜덤하게 validator 를 선택한다.3. validator 가 블록을 만들어 뿌린다.4. 나머지 노드가 해당 블록의 유효성을 검증하고 투표한다.5. 2/3 이상이 찬성하면 블록체인에 포함된다. 이 과정에서 나쁜 행동을 하는 경우 (검증자, 투표 노드 모두) 자신이 담보로 맡긴 이더리움을 잃는 패널티를 받는다.투표를 할 때는, 내가 거짓투표를 하지 않았다는 증거로 내 서명을 포함해서 블록을 만들기 때문에, 블록에는 찬성한 사람들의 서명이 모두 들어있게 된다. 이때 모든 validator 의 서명을 다 포함하면 블록의 크기가 너무 커지기 때문에 BLS 시그니처를 사용한다.이는 하..

CS/블록체인

[블록체인] 20. 이더리움 - Smart Contract & dApp

현재 이더리움은 크게 위와 같은 구조로 되어있따.먼저 EVM을 돌리고 있는 노드가 있고, Light Client 라는 전체 노드를 다 가진게 아니라 내 트랜잭션과 관련된 뭔가가 발생하면 그것만 모니터링 하는 노드가 있을 수 있고, 중앙화된 API 서버를 통해 이더리움 네트워크의 블록 채굴 내역등을 조회할 수 있는 서비스 등이 존재한다. (이런 게 조금 아이러니 하다. 탈중앙화 서비스의 정보를 얻기위한 서버는 중앙화라는 것)  그래서 현재는 이렇게 중앙화된 서버에서 이더리움과 관련된 정보를 제공하고 있지만, 나중엔 궁극적으로 이것까지 탈중앙화를 할 것이라고 이더리움 파운데이션은 예측하고 있다.  이는 사용자 인터페이스용으로 존재하는 이더리움과 별개의 P2P 네트워크라고 보면 된다.  2022년 PoS 로 ..

CS/블록체인

[블록체인] 19. 이더리움 - Account, Transaction, Block

Account 이더리움 account는 크게 2가지가 있다. - externally owned accounts (eoa) : 스마트 컨트랙트를 갖고 있지 않으며, private key로 관리되는 account- contract account(ca) : 스마트 컨트랙트(코드)를 갖고 있으며, 코드로 관리되는 account  1번 계좌는 평범한 일반 유저의 계좌이다.2번 계좌는 만들어진 account, 코드가 포함된 어카운트이다. contract account 는 누군가 스마트 컨트랙트를 이더리움에 업로드하고 싶다고 할 때 '만드는 것' 이며, 이때 gas를 지불해야 한다.그래서 eth를 지불하면서 요청을 보내면 보통 별 문제 없이 만들어진다. (gas = eth 인가..?)업로드된 smart contrac..

CS/블록체인

[블록체인] 18. 이더리움 개요

이더리움은 2013년에 비탈릭 부테린이 만든 블록체인 프로젝트이다.이더리움의 목표는 탈중앙화된 어플리케이션(dAPP)을 만드는 플랫폼이 되는 것이 목표였다.(하지만 부테린의 영향력이 세서 오히려 탈중앙화에 방해가 되고 있다고..) 보통의 어플리케이션은 서버-클라이언트 구조로 되어있지만,이더리움의 목표는 중앙화된 서버가 없는 어플리케이션을 위한 플랫폼이 되는 것이다.더 정확히는 이더리움은 smart contract 라는 코드 (일종의 함수)를 실행하는 플랫폼이다.비트코인에서도 제한적으로 스크립트 실행을 허용했지만, 이더리움은 그보다 제한을 더 풀어서 어떠한 코드도 실행이 될 수 있다.이때 코드의 실행이 전세계에서 분산되어 일어나므로, 일종의 글로벌 컴퓨터와 같이 동작한다.그리고 코드의 실행 결과는 컨센서스..

CS/오토마타

[오토마타] 24. RL vs CFL vs TM

이번 글에서는 지금까지 배운 내용을 토대로 RL, CFL, TM 을 비교해본다.  aⁿ 은 레귤러 언어로서, DFA로 그릴 수 있었고, RE로 표현할 수도 있었고, 위와 같은 RG로 표현할 수도 있었다.(RG는 Linear Grammar 중에서 변수가 왼쪽에만 있거나, 오른쪽에만 있는 형태이면 된다.)   CFL 의 경우, 대표적인 예시가 aⁿbⁿ 으로, 펌핑 렘마를 통해 RL 가 아님을 보일 수 있었고,CFG 를 통해 표현하거나, NPDA를 통해 표현할 수 있었다.   마지막으로 CFG 가 아닌 언어로 대표적인 것이 aⁿbⁿcⁿ 이었다. (이때, n ≥ 1 이어야 한다. 튜링머신은 λ를 취급하지 않기 때문)이 언어는 펌핑 렘마를 통해 CFL이 아니라는 것을 보일 수 있었고, 지난 글에서 마지막 예제 문..

CS/오토마타

[오토마타] 23. Standard Turing Machine

지금까지 RL, CFL 을 다루었지만, 그것에도 속하지 않는 언어들이 있었다.예를 들면 aⁿbⁿcⁿ 과 같은 언어나, ww 와 같은 언어가 있었다. 그렇다면 이런 언어들은 기계로 표현할 수 없을까?저장공간이 스택이 아니라 다른 형태의 저장공간을 쓰면 이런 언어를 기계로 표현할 수 있지 않을지 생각해볼 수 있다.그래서 이런 언어를 표현하기 위한 새로운 기계로 Turing Machine 을 알아보자. Turing Machine 튜링 머신은 위와 같은 구조로 되어있다.튜링 머신에는 input file 이 별도로 없고, 컨트롤 유닛과 매우 긴 테이프가 하나 존재한다.테이프의 셀 하나에는 '테이프 심볼'이 하나 들어간다.  튜링머신은 위와 같이 정의한다.PDA에서 감마(Γ)는 스택 심볼이었다면, 튜링머신에서는 테..

에버듀
'CS' 카테고리의 글 목록 (3 Page)