Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
이전 글에서는 GNN의 Computation Graph와 Aggregation 방법에 대해 정리하였다. 요약하면 각 GNN의 각 Layer에서는 이웃 노드가 보내는 메시지와 이들을 취합하는 Aggregation 단계가 이루어진다. 그다음 단계는 Layer끼리는 어떻게 결합해야 하는 가이다. 최종적으로는 어떤 목적 함수를 만들고 어떻게 학습시켜 나갈지 결정해야 한다. GNN Layer GNN Layer는 node 자신과, 그 이웃의 노드 embedding을 input들로 다음 node embedding을 만든다. Message computation은 이전의 node embedding을 어떻게 다음 노드로 transfer 하는 가를 결정한다. 간단히 W라는 가중치 메트릭스를 곱해주어 전달하는 방식도 있을 수..
이전 글에서 Node를 어떻게 벡터화 시키는 지에 관해서 공부하였다. Node를 벡터화 시켰다면 딥러닝의 방식을 진행할 수 있을까? 하지만 그래프 분야는 image나 text와 같은 데이터보다 훨씬 복잡한 형태를 가지고 있다. 단순히 그래프에서 인접 노드 간의 정로를 가진 매트릭스를 input으로 넣는 것을 어떨까? 하지만 노드의 수의 제곱 이상의 데이터가 생성되기 때문에 파라미터가 너무 많아진다. 거기에 노드를 단순히 우리가 정한 임의의 순서대로 구별해 두었기 때문에 진행 중에 순서가 뒤바뀌면 알 수가 없어진다. GNN는 CNN(Convolution Neural Network)의 idea를 가져온다. CNN은 이미지 데이터를 convolution 연산으로, 중심 노드의 반경(window)으로부터 특징을..
*주의* 온라인 강의를 들으면서 정리한 내용이라, 틀린 부분과 대충 넘어간 부분이 많을 수 있습니다. Node Embedding 기존의 Graph를 딥러닝에서 다루기 위해서는 Graph를 구조화된 데이터 형태에 맞춰야할 필요가 있었다. 하지만, 이제는 그래프를 자동으로 벡터 형태로 만들어 낼 수 있기 때문에 효율적인 딥러닝이 가능해 졌다. 예를 들어 DeepWalk에서는 input 그래프를 다음과 같이 2차원을 표현해 냈다. 이와 같은 과정을 node embedding이라고 한다. 임베딩이란 사람이 쓰는 자연어를 기계가 이해할 수 있는 벡터 형태로 바꾸는 과정을 의미한다. https://casa-de-feel.tistory.com/28 임베딩(Embedding)이 뭐지? *해당 포스팅은 한국어 임베딩(이..
외래키의 위치 일단 데이터베이스의 개념부터 설명하고 들어가자. 두개의 엔티티가 관계(연관)를 가지면 외래키가 두 엔티티중 하나에 들어가야한다. 예를 들어 프로젝트와 프로젝트 매니저 사원의 관계를 생각해보자. 프로젝트에는 단 한명의 매니저가 반드시 존재한다. (프로젝트가 관계에 완전 참여) 따라서 소수의 인원만이 프로젝트 매니저가 된다. (사원은 관계에 부분 참여) 즉, 다음과 같이 표현된다. 일단, 사원 테이블에 자신이 매니저를 맞고있는 컬럼이 있다고 생각해보자. 해당 컬럼은 프로젝트의 기본키를 외래키로 가져오게 된다. 그러나 소수의 사원만 매니저를 담당하므로 대부분의 사원에게는 NULL 값이 삽입되어야 한다. 수 많은 사원들의 해당 필드값이 NULL로 채워진다면, 공간을 낭비하게 된다. 반대로 프로젝트..
Linux에서 procfs와 procseq 관련 C언어 소스코드를 컴파일하면 다음과 같은 오류가 발생할 때가 있다. error: variable 'proc_ops' has initializer but incomplete type 해당 오류를 문법적인 문제라 생각했는데, 사실 Linux 커널에서 procfs와 procseq를 위해 사용하는 proc_ops는 버전에 따라 사용이 가능하다. 출처: https://embetronicx.com/tutorials/linux/device-drivers/procfs-in-linux/ 위의 답글에 따르면 Linux 커널의 버전이 5.5 이상에서만 struct proc_ops 를 사용할 수 있다고 안내되어 있다. 다음의 명령어로 본인의 linux 커널 버전을 확인해보니, ..
MariaDB로 새로 JPA를 공부하다 미칠뻔한 오류를 만나 정리해본다. .... spring.jpa.hibernate.ddl-auto=create-drop Maria DB에서는 application.properties 에 이와 같은 설정을 해두면 Entity 저장시 자동으로 SQL 구문이 생성되어 Table이 새로 만들어진다. 그래서 본인은 일단 두개의 엔티티가 서로를 참조하게 만들었는데, 하나는 테이블이 잘 생성이 되지만 하나는 죽어도 오류가 나면서 spring error: 1146-42s02: table doesn't exist 오류가 발생했다. 이리저리 구글링을 해보며 해결법을 적용을 해보아도 해결이 되지 않았는데 전체 오류를 천천히 읽어보니 Table 생성 sql 구문 다음에 이와 같은 오류를 ..
이전 게시글에 이어서 Entity와 DTO 간의 변환 방법에 대해 소개하겠다. [Spring] DAO, DTO, Entity, 기본 계층 설계 계층 구조를 유지하기 위해서는 데이터베이스의 Entity와 DTO 간의 변환이 빈번히 일어나게 된다. 개발 초기 단계에서는 자주 클래스의 field들이 바뀌거나 추가된다. 이때 Entity와 DTO 간의 변환의 역활을 하는 기능은 field의 변동이 있을 때마다 계속 수정을 해주어야 한다. Entity의 종류가 한두개면 모르겠지만, 수십 개가 있다면 이러한 작업은 반복적일 뿐만 아니라 유지보수도 힘들다. 라이브러리 추가 이를 위해 자바 진영에서 사용하는 라이브러리가 MapStruct이다. https://mapstruct.org/ MapStruct – Java be..
DTO(Data Transfer Object) 스프링은 크게 아래의 3가지 계층로 나눠진다. 컨트롤러 - 비즈니스 - 데이터 이때 계층 사이에 이동하는 데이터는 항상 같은 클래스를 이용하는 것이 아니다. 실제로 데이터베이스에 저장되는 엔티티 클래스를 모든 계층에서 사용하기 보다는 DTO(Data Transfer Object)로 변환하여 정말 필요한 데이터와 로직만을 담는다. 예를 들어 DTO는 데이터 이동만을 담당하므로 setter와 같은 매서드를 포함시키지 않는 방식이다. 아래의 그림 처럼 데이터베이스와 관련이 있다면 Entity로 다루고, 데이터 쪽에서 멀어질 수록 간단한 DTO로 데이터를 다룬다. 비즈니스 계층과 데이터 계층간의 데이터 이동은 DTO 또는 Entity를 사용한다. 이는 팀별 업무 규..
MongoDB의 document의 최대 크기는 16MB이다. 따라서 여러 사진이 저장되는 document는 16MB를 초과하여 저장되지 않는 오류가 발생할 수 있다. 이때는 GridFS를 이용하여 데이터를 분할 저장한다. GridFS는 두가지 종류의 document를 사용해서 저장된다. 이는 위의 그림에서 확인할 수 있듯이 fs.files와 fs.chunks이다. fs.files는 해당 데이터의 정보(크기, 생성 일시, 이름 등)이 저장되어 있고, 원하는 metaData도 삽입할 수 있다. 실질적인 대용량 데이터는 fs.chunks들에 256KB 크기로 분할되어 저장된다. chunk들이 자신의 상위 file의 id값을 가져서 참조하게된다. Configuration 설정 GridFS 파일 저장 이때의 in..
DB의 핵심은 역시 참조 관계의 설정이다. Spring Data MongoDB는 어노테이션을 통한 참조 관계 맵핑을 지원한다. 이전에는 주로 @DBRef 진행하였지만, Spring Data MongoDB 3.3.0부터 지원하는 @DocumentReference 어노테이션으로 설정해보자. Ingredient 문서가 Recipe를 참조하도록 @DocumentReference를 적용하였다. MongoDB의 장점은 다른 SQL DB와 다른게 일대 다 매핑을 위해 @OneToMany와 같은 어노테이션 적용이 필요없다는 점이다. @DocumentReference private List recipes; List로 Recipe를 참조하므로 Ingredient 문서 하나가 여러개의 레시피와 매핑된다. Ingredient..