11 12월 2024

[천체물리 – 우주(과학)] “우주, 기존 예측보다 빠르게 팽창할 수도”

[천체물리 – 우주(과학)] “우주, 기존 예측보다 빠르게 팽창할 수도”

“우주, 기존 예측보다 빠르게 팽창할 수도”

입력
우주를 나타낸 이미지. 게티이미지뱅크

우주를 나타낸 이미지. 게티이미지뱅크

우주가 기존에 예측한 것보다 더 빨리 가속팽창하고 있다는 연구결과가 나왔다.

2011년 노벨물리학상 수상자인 아담 리스 미국 존스홉킨스대 교수팀이 제임스웹우주망원경(JWST) 관측 결과를 통해 계산한 우주 팽창률이 우주배경복사를 토대로 예상했던 우주 팽창률보다 크다는 사실을 확인하고 연구결과를 9일(현지시간) 국제학술지 ‘천체물리학저널’에 발표했다.

우주 팽창률을 계산할 때 사용하는 값은 허블상수다. 미국 천문학자 에드윈 허블이 우주가 팽창한다는 발견을 학계에 보고하면서 우주의 팽창 속도를 계산할 때 제시한 값이다. 허블상수는 우주가 팽창하는 속도를 나타내며 우주 나이와 반비례한다. 하지만 천문학계에는 허블상수에 관한 난제가 있다. 우주를 관측하는 방식에 따라 허블상수가 다르게 측정되는 문제를 뜻하는 ‘허블 텐션’이다.

우주의 팽창을 파악하는 일반적인 방법은 크게 두 가지다. 하나는 다양한 거리에 놓인 여러 은하들이 각각 얼마나 빨리 멀어지는지 후퇴 속도와 거리를 비교하는 것이다. 은하의 실제 움직임을 관측해서 구하는 방법이다.

또 다른 하나는 빅뱅 이후 우주 전역에 남은 ‘우주배경복사’의 분포를 파악하는 방법이다. 물론 우주를 구성하는 ‘암흑물질’과 ‘암흑에너지’의 비율이 각각 다르게 설정된 우주론 모델을 적용하면 같은 우주배경복사에 기반했더라도 허블상수는 조금씩 바뀐다.

문제는 두 방법으로 예측한 허블상수가 다르다는 것이다. 두 번째 방법으로 최근 측정한 허블상수는 메가파섹(Mpc·1pc은 약 3.26광년)당 약 67km/s이다. 1메가파섹(약 300만 광년) 떨어져 있는 은하들이 67km/s의 속도로 서로 멀어지고 있다는 뜻이다. 첫 번째 방법으로 측정한 값은 약 73km/s/Mpc이다. 1990년 허블 우주망원경이 우주로 발사되면서 은하들의 후퇴 운동을 정밀하게 측정하기 시작해 이 값을 얻었다.

리스 교수팀은 제임스웹우주망원경을 활용한 2년 간 관측 데이터를 분석해 허블상수를 72.6km/s/Mpc라고 산출했다. 이는 은하들의 후퇴 운동을 계산한 첫 번째 방법과 유사한 결과지만 우주배경복사 계산에 기반한 결과와는 다소 차이가 난다.

연구팀은 “(우주배경복사에 기반한) 기존 예측과의 불일치가 우연히 발생했다고 보기 어렵다”면서 “이는 우주론 모델에서 중요한 요소가 누락되었을 가능성을 시사한다”고 설명했다. 우주배경복사에 기반해 허블상수를 계산하는 방법은 우주론 모델에 따라 값을 다르게 도출한다. 기존 우주론 모델이 우주를 이루는 암흑 에너지, 암흑 물질의 성질 등 예상치 못한 변수를 계산하지 못할 가능성이 있다는 것이다.

Loading

9 12월 2024

[천체물리 – 우주(과학)] 태양 질량 100억배···‘우주의 괴물’ 극대질량 블랙홀의 비밀 [아하! 우주]

[천체물리 – 우주(과학)] 태양 질량 100억배···‘우주의 괴물’ 극대질량 블랙홀의 비밀 [아하! 우주]

태양 질량 100억배···‘우주의 괴물’ 극대질량 블랙홀의 비밀 [아하! 우주]

입력
[서울신문 나우뉴스]

가스와 먼지로 둘러싸인 극대질량 블랙홀의 상상도. 출처=Robert Lea(created with Canva)/NASA

가스와 먼지로 둘러싸인 극대질량 블랙홀의 상상도. 출처=Robert Lea(created with Canva)/NASA

중력이 매우 커서 어떤 물질도 탈출할 수 없는 블랙홀이 모든 거대 은하의 중심에선 초대질량으로 숨어있을 것으로 과학자들은 예측한다. 초대질량 블랙홀은 수백만 또는 수십억 개의 태양과 같은 질량을 가졌고, 어떤 것은 태양질량의 100억 배 이상인 ‘극대질량 블랙홀’이 되기도 한다.

현재 밝혀진 가장 거대한 블랙홀은 피닉스 A로, 이 블랙홀이 존재하는 피닉스 성단 역시 지금까지 발견된 가장 무거운 성단 중 하나로 꼽힌다. 58억 광년 떨어진 피닉스 A의 질량은 태양의 1000억 배로 추산된다. 또 다른 거대 블랙홀은 약 10억 광년 떨어진 곳에 있는 토난친틀라 618(Ton 618)로, 태양 질량의 660억 배로 추정한다.

​피닉스 A와 Ton 618 같은 괴물 같은 극대질량 블랙홀이 과연 얼마나 더 커질 수 있는지, 그 한계가 과학자들의 오랜 궁금증이다.

프리얌바다 나타라잔 미국 예일대 천문물리학과 교수팀은 그 답을 찾았다고 발표했다.

​나타라잔은 “극대질량 블랙홀과 초질량 블랙홀은 각각 태양 질량의 100억 배, 1000만 배를 초과하는 블랙홀로 정의한다”며 “따라서 극대질량 블랙홀은 평균적으로 초질량 블랙홀보다 1만 배 더 무겁다”고 설명했다.

은하계 M87 중심부의 초질량 블랙홀과 그 그림자 이미지. 출처=EHT Collaboration

은하계 M87 중심부의 초질량 블랙홀과 그 그림자 이미지. 출처=EHT Collaboration

BDG, 극대질량 블랙홀이 숨는 최적의 장소나타라잔은 극대질량 블랙홀이 어디에 있는지 알아내기 위해 단서를 제시했다. 은하 중심에 품고 있는 초질량 블랙홀은 그 은하 내 별의 총질량과 상관관계가 있다는 것이다. “이러한 상관관계는 블랙홀이 성장하는 방식과 그 은하계에서 별이 형성되는 방식 사이에 깊고 심오한 연관성이 있음을 시사한다”는 게 나타라잔의 설명이다.

극대질량 블랙홀은 가장 많은 별을 품어 가장 밝은 은하계에 있어야 한다. ‘가장 밝은 중앙 은하계’(Brightest Cluster Galaxy, BCG)로 알려진 은하계 군집 중심에 있는 밝은 은하가 극대질량 블랙홀을 품기에 최적의 후보라는 의미다.

나타라잔은 ​“극대질량 블랙홀은 BCG의 중심에서 발견됐다. 놀라운 점은 모든 크기의 블랙홀이 본질적으로 우주 모든 곳에 흩어져 있다는 것이다”라고 전했다. 이어 “은하 하나가 블랙홀 집단 여럿을 품고 있고, 은하의 밝기에 따라 극대질량 블랙홀 또는 중심부에 초질량 블랙홀이 있다”면서 “중심에서 벗어나 분포하는 블랙홀은 초질량부터 더 낮은 질량까지 다양할 수 있다”고 덧붙였다.

NASA 애니메이션에서 우주의 가장 큰 블랙홀 중 일부를 강조한 스크린샷. 여기에는 약 600억 배 태양질량만큼 큰 TON 618이 포함된다. 출처=NASA

NASA 애니메이션에서 우주의 가장 큰 블랙홀 중 일부를 강조한 스크린샷. 여기에는 약 600억 배 태양질량만큼 큰 TON 618이 포함된다. 출처=NASA

‘식탐가’ 블랙홀, 질량의 한계를 짓는 방식은​은하계를 지배하는 우주의 괴물들은 무한 성장할 수는 없는 걸까? 그들에게 부과된 유일한 한계는 그들에게 가해지는 가스, 먼지, 별의 양과 그들이 ‘먹을’ 수 있는 시간의 양이다. 블랙홀은 실제로 스스로에 이러한 성장 한계를 부과한다.

나타라잔은 ​“가스가 은하 중심에서 흘러들어 초질량 블랙홀에 공급되지만 모든 가스가 초질량 블랙홀의 지평선까지 도달하여 흡수되는 것은 아니”라며 “일부만이 유입되고 나머지는 블랙홀에 의해 흩어진다. 블랙홀은 극도의 식탐가”라고 덧붙였다.

제트를 내뿜는 블랙홀 상상도. 초질량 블랙홀에 의해 구동되는 은하의 중심 활동 영역. 사진=출처: JAXA

제트를 내뿜는 블랙홀 상상도. 초질량 블랙홀에 의해 구동되는 은하의 중심 활동 영역. 사진=출처: JAXA

블랙홀에 떨어지지 않는 가스 일부는 강력하고 빠르게 분출되는 ‘천체물리학적 제트’로 폭발되며, 이는 은하 너머 수십 광년까지 뻗어나갈 수 있다.

이러한 유출은 주변 은하 블랙홀에서 더 멀리 떨어진 가스를 가열하고 변형시켜 별의 탄생에 직접적인 영향을 미친다. 나타라잔은 “별은 가스와 먼지 구름이 식고 응축될 때 형성되는데, 제트가 이 가스를 가열하고 응축을 제지해 별 형성을 막는다”고 설명한다.

제트의 작용은 가스를 은하 중심에서 밀어내 블랙홀로 흘러가는 물질의 ‘먹이 공급원’ 또한 차단하여 가스 유출을 자체적으로 조절한다. 이는 블랙홀 성장에 대한 자연스러운 순환과정을 시사한다.

나타라잔은 가스가 은하의 나머지 부분에서 중심 영역으로 흘러들 가능성이 없기 때문에 은하 내부 영역의 가스가 완전히 소모되면 블랙홀은 성장에 방해를 받는다고 밝혔다.

극대질량, 초질량, 항성질량 블랙홀의 질량 범위를 보여주는 다이어그램. 출처=Robert Lea(created with Canva)

극대질량, 초질량, 항성질량 블랙홀의 질량 범위를 보여주는 다이어그램. 출처=Robert Lea(created with Canva)

블랙홀이 성장하는 방식이나, 먹이 공급을 차단하고 성장을 저해하는 것으로 보이는 자연적 피드백 시스템을 고려할 때 초거대 블랙홀의 한계는 약 1000억 태양 질량이 된다.

나타라잔의 이론이 맞다면 피닉스 A는 우리가 지금까지 발견한 가장 거대한 블랙홀일 뿐만 아니라 우리가 발견할 수 있는 가장 큰 블랙홀일 수도 있다.

나타라잔 팀은 초거대 블랙홀과 항성 질량 블랙홀 사이의 블랙홀을 조사할 예정이다. 후자 그룹의 구성원은 태양보다 약 100배 더 무겁고 수명이 다한 거대한 별의 붕괴를 통해 형성된다. 초질량과 항성질량 사이의 흥미로운 집단은 ‘중간질량 블랙홀’로 알려져 있으며, 천문학자들이 이를 찾는 데 어려움을 겪었다.

나타라잔은 “초질량 블랙홀과 항성질량 블랙홀 사이의 격차를 메우겠다”면서 “태양 질량의 1000~1만배에 달하는 질량을 가진 중간질량 블랙홀이 많이 있어야 하는데, 우리는 지금 막 이를 발견하기 시작했다”고 밝혔다.

이 연구는 논문 저장소 사이트 아카이브(arXiv)에 게재됐다.

[출처] https://n.news.naver.com/mnews/hotissue/article/081/0003501710?cid=1017777&type=series&cds=news_media_pc

Loading

8 12월 2024

[사회과학] [박진영의 사회심리학] 계엄군에 맞서는 힘은 어디서 나올까

[사회과학] [박진영의 사회심리학] 계엄군에 맞서는 힘은 어디서 나올까

[박진영의 사회심리학] 계엄군에 맞서는 힘은 어디서 나올까

입력
윤석열 대통령이 비상계엄을 선포한 가운데 4일 자정께 서울 여의도 국회의사당 앞에서 시민들이 계엄 해제 구호를 외치고 있다. 연합뉴스 제공

윤석열 대통령이 비상계엄을 선포한 가운데 4일 자정께 서울 여의도 국회의사당 앞에서 시민들이 계엄 해제 구호를 외치고 있다. 연합뉴스 제공

“군인들이 압도적으로 강하다는 걸 모르지 않았습니다. 다만 이상한 건, 그들의 힘만큼이나 강렬한 무엇인가가 나를 압도하고 있었다는 겁니다. 양심.그래요, 양심. 세상에서 제일 무서운 게 그겁니다.” -한강 ‘소년이 온다’ 중

압도적이고 강력한 불의를 눈 앞에 두었을 때 특히 국가 권력같이 도저히 개인이 싸워서는 될 것 같지 않은 불가능한 상황에서도 천안문의 탱크맨처럼 맞서는 사람들이 있다. 계란으로 바위치기라는 사실을 알면서도 여전히 저항하는 사람들이 있다.

적어도 이들에게 싸워서 이길 수 있겠냐는 계산은 저항 여부에 큰 영향을 미치지 못하는 것이다. 이 경우 보통 이길 수 없지만 그래도 행동하게 만드는 다른 이유가 존재한다.

심리학에서 정의하는 “용기”란 두려움이 없는 상태보다는 두려움에도 불구하고 리스크를 지면서도 싸울 가치가 있는 중요한 무엇을 위해 행동하는 것을 말한다. 사람들이 지는 싸움을 하는 이유는 질 것이지만 그럼에도 불구하고 지켜야 하는 무엇이 있기 때문이라는 것이다.

그 중요한 무엇이란 시대에 따라 또 사람마다 다 다를 수 있다. 우리는 다 각자가 중요하다고 생각하는 가치를 지키기 위해 조금 또는 많은 위험을 감수하며 살아가고 있다.

자신의 가치관이 달린 문제라고 해도 위험하면 가만히 있는 것이 더 이득일 것 같지만 사람이라는 존재는 어떤 가치관을 확립한 이상 거기에 맞게 살아가지 않으면 뭔가 잘못된 것 같고 이렇게 사는 것이 과연 옳은가 하는 회의감이나 죄책감에 시달리게끔 설계되어 있다.

마크 리어리 듀크대 심리학자에 의하면 자아의 주된 존재 이유 중 하나가 ‘이렇게 우리에게 그렇게 행동해도 되겠냐’며 자기 성찰/비판적인 잔소리를 해대는 것이다. 결국 의외로 많은 사람들이 스스로에게 떳떳하기 위해 좀 더 구체적으로는 나 자신을 의심하고 캐묻는 자아의 비판적인 말들로부터 비교적 쉽게 자유로워지기 위해 위험을 감수한다.

고작 그런 이유로 위험을 감수하나 싶기도 하지만 이는 한편으로는 양심의 가책, 내적 질책이 얼마나 무서운지 잘 보여준다. 예를 들어 로이 바우마이스터 하버드대 심리학자에 의하면 ‘내가 나를 향해 내리는 부정적인 평가에서 자유로워지는 방법을 찾지 못하는 것(나를 부끄러워하는 나와 함께 살아가는 것은 매일이 지옥이므로)’이 사람들로 하여금 극단적인 선택을 하게 만드는 주된 원인 중 하나다.

나를 부끄러워하는 타인과는 절교하면 그만이지만 나를 부끄러워하는 나와는 헤어질 수 없기 때문이다. 이런 지옥을 피하기 위해 마치 자아의 스위치를 꺼버리듯 의식을 파괴하는 것이 극단적 선택이라는 설명이다. 물론 ‘후회’나 ‘부채감’ 등으로 영원히 고통받는 사람들도 적지 않다. 이런 점에서 옳은 일을 한다는 것은 나를 내적 고통으로부터 해방시키는 방법이기도 한 것이다.

위험이 존재하는 상황과 별개로 평상시에 투표를 통해 주권을 행사하는 행동 역시 투표를 자신이 중요하게 여기는 가치를 지키는 행동으로 본 사람들이 더 그렇지 않은 사람들에 비해 투표에 더 많이 참여한다는 연구 결과가 있었다.

한편 사람들이 대체로 중요하다고 여기는 가치를 지키는 방향으로 행동하도록 만들어져 있다는 사실은 어떤 중요한 가치가 위기에 처해 있다는 사회적 공감대가 형성되어 있다면 적지 않은 사람들이 나서서 변화의 바람이 불 것임을 알려주기도 한다. 여전히 희망이 있는 이유다.

Maffly-Kipp, J., Holte, P. N., Stichter, M., Hicks, J. A., Schlegel, R. J., & Vess, M. (2023). Civic hope and the perceived authenticity of democratic participation. Social Psychological and Personality Science, 14(4), 419-427. https://doi.org/10.1177/19485506221107261

※필자소개
박진영. 《나, 지금 이대로 괜찮은 사람》, 《나를 사랑하지 않는 나에게》를 썼다. 삶에 도움이 되는 심리학 연구를 알기 쉽고 공감 가도록 풀어낸 책을 통해 독자와 꾸준히 소통하고 있다. 온라인에서 ‘지뇽뇽’이라는 필명으로 활동하고 있다. 현재 미국 듀크대에서 사회심리학 박사 과정을 밟고 있다.

Loading

7 12월 2024

[사진게시판] [c컷] 대한민국의 특별한 순간

[사진게시판] [c컷] 대한민국의 특별한 순간

[c컷] 대한민국의 특별한 순간

대한민국 관광공모전 사진 전시회, 오는 15일까지

 
01 FZJZWLR5QJA3BMTMIYOMATTOSY.png
 
대한민국 관광공모전(사진부문) 디지털카메라 부문 ‘대상’ 수상작 김태현 작가의 ‘흔적’. /한국관광공사

“와…여기가 한국이라고?”

지난 2일 서울역 3층 대합실에서 열리고 있는 2024 대한민국 관광공모전 사진 전시회 ‘특별한 순간(Amazing Moment)’을 찾은 한 관람객의 탄성이 이어졌다. 열차 시간이 남아서인지 한참을 머물다 간 한 관람객은 “생각보다 우리나라에 가볼 곳이 너무 많은 듯 하다. 한 자리에서 이런 풍경을 봐서 고맙고 뿌듯하다”고 했다.

02 JJ4VB6LUM5H7DLE4RLE23KNJZA.png
 
지난 2일 서울역 3층 대합실에서 열리고 있는 2024 대한민국 관광공모전 사진 전시회 ‘특별한 순간(Amazing Moment)’. /남강호 기자

이번 전시회에서는 2024 대한민국 관광공모전 사진 부문 수상작 96점과 함께 한국철도공사, 한화 커넥트, 여행에미치다 등과의 협업을 통한 선정한 120여 점의 작품을 만나볼 수 있다. 대자연의 영원한 풍경(ETERNAL LANDSCAPE), 아름다운 특별한 순간(A MOMENT IN TIME), 자연과 사람이 공존하는 이야기(THE MOMENT), 한국관광사진기자단(Frame Korea), 여행에 미치다 협업 전시관 5개 테마관으로 구성된다.

03 QMKOOF7XAVFWJBJEPJDSJSHKDE.png
 
지난 2일 서울역 3층 대합실에서 열리고 있는 2024 대한민국 관광공모전 사진 전시회 ‘특별한 순간(Amazing Moment)’. /남강호 기자

관광공모전 대상이자 대통령상 수상작은 김태현 작가의 제주 서귀포시 안덕면, 사계 해변을 담은 ‘흔적’이다. 이끼와 제주의 바다가 공존하는 해변의 모습을 장 노출을 통해 지구의 과거와 현재가 만나는 순간을 포착했다는 호평을 받았다.

04 OQXY7T4CYNFP3OJC56KPY4CPQM.png
 
대한민국 관광공모전(사진부문) 스마트폰 부문 ‘금상’ 수상작 강석환 작가의 ‘산사의 설야’. /한국관광공사

문체부 장관상은 ‘산사의 설야(인천 강화)’, ‘안동 하회마을의 봄(경북 안동)’ 등이 각각 받았다. 관광공사 사장상은 ‘역사와 함께 깊어진 가을(서울)’, ‘물 들어오는 그 시간(충남 서산)’ 등이 각각 뽑혔다.

05 2W75RUVXN5AV3D2WRN2WRC4HDQ.png
 
대한민국 관광공모전(사진부문) 드론 부문 ‘금상’ 수상작 김대일 작가의 ‘안동하회마을의 봄’. /한국관광공사

전체 수상작은 한국관광공사가 운영하는 포토코리아(phoko.visitkorea.or.kr)에서도 확인할 수 있다.

06 5JX2UN2KXJCVVP6URDLNYIXADQ.png
 
대한민국 관광공모전(사진부문) 디지털카메라 부문 ‘입선’ 수상작 문제안 작가의 ‘2월 늦은 폭설이 만든 설경액자’. /한국관광공사
07 DIEH6FPESNEEVDVCFCVRET5GKE.png
 
대한민국 관광공모전(사진부문) 드론 부문 ‘입선’ 수상작 정대정 작가의 ‘동백숲’. /한국관광공사
08 N7LZDNQDUZH7THHVEYC57P35HI.png
 
대한민국 관광공모전(사진부문) 스마트폰 부문 ‘입선’ 수상작 여진모 작가의 ‘산정 호수’. /한국관광공사
09 JCULAMGWVFCWPCR2MVS2DIHX64.png
 
대한민국 관광공모전(사진부문) 디지털카메라 부문 ‘금상’ 수상작 박구용 작가의 ‘7월 고분군’. /한국관광공사
10 S2AAL5AQWRHVBATYDL4DZ23DG4.png
 
대한민국 관광공모전(사진부문) 드론 부문 ‘입선’ 수상작 심수연 작가의 ‘체화정의 겨울’ ./한국관광공사
11 JJ4ATNGZKJG3LB2P5MYHSYHHH4.png
 
대한민국 관광공모전(사진부문) 디지털카메라 부문 ‘입선’ 수상작 양성영 작가의 ‘등나무 우주선’. /한국관광공사
12 BB3JTKIJTBCJLDPKPBEU2R2GWU.png
 
대한민국 관광공모전(사진부문) 디지털카메라 부문 ‘입선’ 수상작 심재용 작가의 ‘겨울왕국’. /한국관광공사
13 QUZIVBZPWFEL7DVGI2DAVV5WXM.png
 
대한민국 관광공모전(사진부문) 드론 부문 ‘입선’ 수상작 이병현 작가의 ‘신라천년의 도시의 봄’. /한국관광공사

[출처] https://www.chosun.com/video_photo/2024/12/06/75NAJTDC2NE6BKUFM5HDSH5DPQ/

Loading

7 12월 2024

[알아봅시다] [기후변화는 지금] 작년 폭염, 구름 반사판 줄어든 탓

[알아봅시다] [기후변화는 지금] 작년 폭염, 구름 반사판 줄어든 탓

[기후변화는 지금] 작년 폭염, 구름 반사판 줄어든 탓

“태양에너지의 반사율 감소, 온난화 가속의 숨은 원인”

01 CRKETJONR7VD72VDDUKFTX6XR4.png
 

지난해 12월 경북 포항시의 낮 최고기온이 20.1도로 겨울들어 가장 따뜻한 날씨를 기록하자 시민들과 관광객들이 북구 영일대해수욕장에서 바닷바람을 즐기고 있다./뉴스1

2023년은 사상 가장 극단적인 기후 변화를 기록한 해로 남았다. 평균 기온이 산업화 이전 대비 섭씨 1.5도 가까이 상승하면서 새로운 기록을 세웠고, 해수면 상승이나 빙하 감소, 해양 폭염과 같은 이상 현상이 관측됐다. 전문가들이 지난해 극단적인 폭염의 원인을 찾기 위해 노력하는 가운데, 구름의 감소가 급격한 기온 상승의 원인이라는 연구 결과가 나왔다.

독일 헬름홀츠 극지 및 해양 연구 센터의 알프레드 베게너 연구소(AWI) 연구진은 지난해 급격한 기온 상승의 원인이 지구의 반사율 감소 때문이라는 연구 결과를 국제 학술지 ‘사이언스(Science)’에 6일 발표했다.

기후 과학자들은 지난해 이례적인 기온 상승의 원인을 찾기 위해 엘니뇨 현상, 대기 중 온실가스 축적, 화산 폭발을 포함한 다양한 요인을 분석했다. 엘니뇨는 적도 동태평양 해역의 해수면 온도가 지속적으로 높은 상태를 말한다. 이를 통해 산업화 이전 대비 약 1.3도가 오른 것은 설명할 수 있었으나, 나머지 약 0.2도의 원인은 밝히지 못했다.

연구진은 이런 설명 불가 구간의 주요 원인으로 ‘지구 반사율(알베도·albedo)’ 감소를 지목했다. 지구 반사율은 태양에너지 중 일부가 대기 중 구름, 극지방의 눈이나 얼음에 반사돼 우주로 되돌아가는 비율을 뜻한다. 반사율이 낮을수록 태양 에너지가 더 많이 지표면에 도달하면서 지구의 온도가 높아진다.

연구진은 미 항공우주국(NASA·나사)의 위성 데이터와 유럽중기기상예보센터(ECMWF)의 데이터를 분석해 지난해 지구 반사율이 1940년 이후로 가장 낮았다는 것을 확인했다. 특히 북대서양과 열대 지역에서 저층 구름이 감소하면서 지구 반사율이 낮아졌다. 연구 결과에 따르면, 2020년 12월 이후 반사율이 감소하지 않았다면 지난해 평균 기온은 약 0.23도 낮았을 것이라는 결론이 도출됐다.

연구진은 “저층 구름은 다양한 요인으로 줄어들 수 있지만, 해상 연료에 대한 규제가 강화되면서 대기 중 에어로졸 농도가 낮아진 점이 주요한 것으로 보인다”고 설명했다. 에어로졸은 구름 생성에 필수적인 응결핵 역할을 하며, 태양광을 직접 반사해 냉각 효과를 낸다. 하지만 에어로졸 농도가 줄어들면서 저층 구름이 줄어들었고, 반사율이 낮아져 온난화가 가속화됐다는 설명이다.

과학자들은 자연적인 기후 변동도 영향을 줄 수 있지만, 지구 온난화 자체로 저층 구름이 감소했을 수 있다고 본다. 연구진은 “만약 저층 구름 감소가 지구 온난화의 결과라면, 향후 온난화가 더욱 가속화되면서 저층 구름이 줄어들고, 반사율이 더 줄어 파리협정에서 설정한 1.5도 상승 한계에 훨씬 빨리 도달할 수 있다”며 “극단적 기후 현상에 대응하기 위한 대책을 즉시 강화해야 한다”고 밝혔다.

참고 자료

Science(2024), DOI: https://doi.org/10.1126/science.adq7280

[출처] https://www.chosun.com/economy/science/2024/12/06/TDLAXZPIS5DKTUESXKNLG6Q5PA/

Loading

3 12월 2024

[교직훈련/교수법] IT 개발자에서 결국, 인생2막 “교육자”로 변신 中

[교직훈련/교수법] IT 개발자에서 결국, 인생2막 “교육자”로 변신 中

27년 넘게 개발자로 일하며 다양한 프로젝트를 경험했는데요, 이제는 제가 가진 경험과 노하우를 다른 분들과 나누고 싶어서 새로운 도전을 시작했습니다. 최근 “국가 직업능력 훈련 교사” 자격증을 취득하고, 직업훈련교사로의 전환을 준비 중입니다.

앞으로는 실무에서 쌓은 이야기를 바탕으로, 필요한 기술과 지식을 전달하며 함께 성장할 수 있는 교육자가 되고 싶습니다.

직업능력개발훈련교사 자격증(web용_blur처리).png

Loading

1 12월 2024

[교직훈련/교수법] 생성 AI(ChatGPT 포함) 시대의 대학교수법

[교직훈련/교수법] 생성 AI(ChatGPT 포함) 시대의 대학교수법

주요 요약 (5-10개 포인트)

  1. 생성 AI 시대의 대학 교수법 변화
    • ChatGPT와 같은 생성 AI는 대학 강의의 구성 및 전달 방식에 새로운 기회를 제공하며, 교수법과 학습법 모두를 변화시키고 있음.
    • 맞춤형 콘텐츠 제공, 학습자의 이해도 실시간 측정, 개인화된 학습 지원 가능.
  2. AI 도입의 장점과 한계
    • AI를 활용하면 강의 준비 시간 단축, 자료 제작, 시험 문제 생성 등의 업무를 지원받을 수 있음.
    • 하지만 데이터의 정확성 문제와 가짜 정보 생성의 위험성 존재.
  3. 빌 게이츠와 AI 시대의 혁명적 전환
    • 빌 게이츠는 AI를 윈도우 GUI 이후 가장 혁신적인 기술로 평가하며, 개인과 기업의 AI 활용 능력이 경쟁력을 결정할 것이라고 강조.
  4. ChatGPT 활용 사례와 교수법 개선
    • ChatGPT를 활용한 강의 계획서 작성, 학습 자료 준비, 시험 문제 생성 등 구체적인 사례 공유.
    • 예: 교육행정학 강의 계획, 연구 아이디어 생성, 학생 관리 및 평가 방법 제안.
  5. AI 기반 조교 역할
    • ChatGPT는 교수의 조교처럼 반복적인 작업을 수행하며 강의와 연구를 지원.
    • 예를 들어 보고서 주제 제안, 연구 논문 초안 생성, 인터뷰 가이드 작성 등에서 활용.
  6. 학생과의 상호작용 개선
    • 학생 동기 부여를 위한 다양한 방법 제안, 수업 중 규칙 설정 및 문제 해결 방안 제공.
    • 예: 수업 중 조는 학생 대처법, 질문 유도 방법 등.
  7. AI의 위험성
    • AI 챗봇의 오작동으로 인한 심각한 사례(예: 사용자에게 자살을 종용) 언급.
    • 감정 공유형 AI와 관련된 윤리적 문제도 제기.
  8. 미래 교수법과 AI 활용의 방향성
    • 교수들은 AI 활용 방법을 숙지하고 윤리적 한계를 인식해야 함.
    • AI의 활용은 강의 지원 도구로서 조교 역할을 넘어 강의 내용 구성, 학습 맞춤화로 확대 가능.
  9. 연구 분야에서의 AI 활용 한계
    • 연구 논문 작성에서 아이디어 제공은 가능하지만, 인용된 자료의 신뢰성 부족.
    • 생성된 데이터나 자료는 반드시 검증 필요.
  10. 질문과 답변 세션 계획
    • AI를 활용해 실시간 질문에 답변하거나, 강의와 연구 자료를 개선할 수 있도록 세션을 진행할 계획.
    • 학생들의 적극적인 참여와 새로운 AI 활용법 학습이 강조됨.

Loading

30 11월 2024

[사회과학] [박진영의 사회심리학] “조금 못 자더라도 살 수 있다”

[사회과학] [박진영의 사회심리학] “조금 못 자더라도 살 수 있다”

[박진영의 사회심리학] “조금 못 자더라도 살 수 있다”

입력
게티이미지뱅크 제공

게티이미지뱅크 제공

불면증을 겪는 사람 중 다수가 많이 보고하는 문제 중 하나가 ‘잠에 대한 불안’이다. 조금 피곤하고 졸린 기분도 들어서 오늘은 잘 잘 수 있을 거라는 마음으로 잠자리에 들어도 곧 막상 누우니까 졸음이 달아나는 것 같고 작은 소리에도 신경이 곤두서서 시계 소리는 점점 커지는 것만 같고 어쩌면 오늘도 다 잔 것이 아닐까, 이대로 내일도 피로에 쩔어서 해야 할 일도 쉬는 것도 아무것도 하지 못하는 어정쩡한 날이 되는 것이 아닐까 하며 불안감에 젖는다.

그러다 시계를 확인해 보면 벌써 새벽 한 시, 조금 후면 두 시, 세 시… 시간에 쫓기는 불안에 시달리다 네 시가 되어 겨우 잠을 자게 된다. 무슨 일을 하든지 시간에 쫓기면 불안과 스트레스가 쌓인다. 각성 수준이 낮아지고 몸에 힘이 빠져야 겨우 잘 수 있을까 말까한 상황에서 잠을 잘 시간이 얼마 남지 않았다는 불안이 올라오면 편히 잠들기는 어려워지기 마련이다.

비슷하게 낮에 힘든 일이 많았던 경우, 자면서도 일에 대한 걱정이 많을 때, 또 그냥 기본적으로 완벽주의 정도가 높은 사람들일수록 더 밤에도 쓸데없이 각성수준이 높아져서 잠을 잘 이루지 못하는 편이라는 연구들이 있었다.

하지만 잠을 자는 것 자체에 불안감이 있는 경우는 조금 달라서 낮에 아무 일 없었어도 ‘잠을 최소한 몇 시간은 자야 한다’는 잠에 대한 강박이 심한 탓에 침대에 눕고 시간이 조금씩 지나갈수록 불안이 쌓여 간다.

나 역시 한동안 잠에 대한 강박이 있어서 최소한 몇 시간은 자야 한다거나 푹 자고 일어나서 상쾌한 아침을 맞이해야만 멀쩡하게 기능할 수 있을 거라는 생각들을 가지고 있었다.

물론 잠을 잘 자는 것은 실제로도 중요한 일이지만 한편으로는 조금 못 잔다고 해서 며칠을 내리 한 숨도 자지 못하는 게 아닌 이상 또 다음날 중요한 일정이 있는 게 아니라면, 조금 피곤하게 보낸다는게 그렇게 두려움에 떨 일인지 생각해 보면 또 별 일 아닌거 같기도 한 것이다.

많은 만성질환자 및 우울증, 불안증 환자들이 가지고 있는 부적응적인 사고방식 중 하나가 아직 일어나지 않은 일에 대해 “더 안 좋은 일(더 아프고 우울하고 끔찍하게 나쁜 일)이 생기면 어떡하지?” 라고 하는 “재앙화” 사고이다.

아예 생기지 않을 수도 있고 또 생각하기에 따라 크게 나쁘지 않을 수 있는 일의 결과를 크게 과장해서 두려워하다보니 실제로 작은 일에도 육체적, 어쩌면 그보다 더 큰 심리적 고통을 겪게 되고 그러다 보니 더 두려움이 쌓이는 악순환이다. 우리 몸은 마음이 아픈 만큼 실제로 갖은 신체화 증상을 겪도록 설계되어 있기 때문에 불필요한 스트레스는 줄이는 것이 좋다.

따라서 지금 내가 걱정하는 것이 어떤 일의 결과를 실제보다 부풀려서 생각하고 걱정하고 있는 것인지 (그것이 잠이 되었든 다른 무엇이 되었든) 아니면 사실 ‘내가 걱정하는 것보다는’ 괜찮을 것이지만 나의 마음이 자꾸 내 안의 원초적인 생존 본능과 불안을 자극하는 오경보를 울려대는 것은 아닌지 생각해 볼 필요가 있다.

한창 불면증이 심할 때 인지행동 치료를 받은 적이 있는데 의외로 가장 도움이 되었던 조언이 “조금 못 자도 살 수 있다”는 얘기였다. 너무 단순화해서 이야기하긴 했지만 잠을 잘 자는 날도 있고 그렇지 않은 날도 있는 것이 정상이며 그렇지 못했다고 해서 뭔가 큰 일이 날 것처럼 생각하지는 말라는 것이었다.

아예 하루를 꼬박 새고 언젠가 졸음이 올 때 푹 자는 것이 더 생체리듬을 돌리는 데 효과적일 수도 있다는 얘기와 함께 하루의 상쾌함을 결정하는 데에는 다양한 요소가 있으며 ‘잠’이 물론 중요하지만 단 하나의 절대반지 같은 것은 아니라는 얘기였다.

그러고 보면 업무상 낮과 밤이 항상 바뀌는 사람들도 있고 여행이 잦아서 시차적응을 자주 겪어야 하는 사람들도 다 살아가는데 (물론 쉽다는 이야기는 아니다) 어떤 날은 낮에 쪽잠이라도 조금 자면 되는 것이지 불면증으로 (아직까지는) 삶이 크게 위협을 받지는 않는 것 같다. 잠에 대한 미련과 강박을 내려놓으니 실제로 더 잘 자게 된 것 같다.

하지만 평소 불면증을 심하게 앓고 있는 편이라면 전문가의 도움을 받아보도록 하자. 수면 클리닉이나 수면인지행동 치료를 하는 센터를 찾아보는 것도 좋은 방법이다.

※필자소개
박진영. 《나, 지금 이대로 괜찮은 사람》, 《나를 사랑하지 않는 나에게》를 썼다. 삶에 도움이 되는 심리학 연구를 알기 쉽고 공감 가도록 풀어낸 책을 통해 독자와 꾸준히 소통하고 있다. 온라인에서 ‘지뇽뇽’이라는 필명으로 활동하고 있다. 현재 미국 듀크대에서 사회심리학 박사 과정을 밟고 있다.

[출처] https://n.news.naver.com/article/584/0000029795?cds=news_media_pc

Loading

29 11월 2024

[TV/언론] [유석재의 돌발史전] 세종대왕의 한글은 과연 ‘파스파 문자’의 표절작인가?

[TV/언론] [유석재의 돌발史전] 세종대왕의 한글은 과연 ‘파스파 문자’의 표절작인가?

[유석재의 돌발史전] 세종대왕의 한글은 과연 ‘파스파 문자’의 표절작인가?

여전히 그렇게 생각하는 해외 문자학자들이 많다는데…

01 KLB2EXDYYNGV3LXPMCYAW2E2LU.png
파스파 문자(왼쪽 줄)와 한글 중 발음이 같은 글자 몇 개를 비교해 놓은 그림. /조선일보 DB

이제 해외에 나가서 한글과 마주치는 것은 흔한 일이 됐습니다. 한국산 중고 버스의 한글로 쓰인 행선지 안내문을 일부러 떼지 않고 운행하는가 하면, 한국산이 아닌데도 한국산인 척 한글로 써 놓은 상품도 종종 봅니다. 식당 메뉴판 같은 데서 엉터리 한글을 보면 배를 잡고 웃기도 하죠. 한글이 세계화돼 가는 것을 보고 있는 우리는 한글에 대해 대단한 자부심을 지니고 있습니다. 젊은 외국인들은 ‘한글은 유독 동그라미가 많아 예쁘다’며 선호하기도 하죠. 우리가 못살던 시절엔 일어나지 않았던 일이었습니다.

하지만 정작 외국 학자들 중엔 한글에 대해 심드렁해하는 사람이 많습니다. 왜 그럴까요. 세계 문자학계에선 아직도 이런 편견을 가진 학자들이 상당수 있다고 합니다.

“한글? 그거 몽골의 파스파(八思巴) 문자를 모방한 것 아냐?”

파스파 문자란 1265년 티베트 출신의 파스파가 원나라 세조 쿠빌라이의 명을 받아 만든 문자로 지금은 쓰이지 않습니다. 위 그림에서 몇 개 파스파 문자와 한글의 자형을 비교해 보면 일견 비슷한 것도 같습니다. 그런데 자세히 보면 뭐 그렇게 비슷한가, 하는 생각도 듭니다.

이 문제에 대해 국내에서 드물게 깊게 연구한 학자가 정광 고려대 명예교수입니다. 그는 “한글이 파스파 문자의 영향을 받은 것은 맞다”고 말합니다. 그러나 “세계 어느 문자가 다른 문자의 영향을 받지 않고 하늘에서 뚝 떨어진 것이 있느냐”고 반문합니다.

그는 이렇게 설명합니다. 세종은 고도로 발달한 인도와 중국의 음성학, 몽골의 파스파 문자까지 깊게 연구했습니다. 한글은 국제적인 언어학의 토대 위에 독창적인 형태로 더욱 발전시킨 문자였습니다. 조음 음성학의 이론에 근거해 초성 글자를 발음기관의 모양을 따 상형(象形)하는 놀라운 자형(字形)으로 만들었고, 모음의 중성은 천지인(天地人) 삼재(三才)를 상형했는데, 이것은 어디에서도 볼 수 없는 한글만의 특징이라는 것입니다.

02 3MTE6NP25VF6TEAFNB6VTRLPUQ.png
 
언어학자 정광 교수가 2023년 4월 19일 서울 중계동 자신의 작업실에서 본지와 인터뷰를 갖고 있다. /박상훈 기자

이 설명을 조금 자세히 들여다 보겠습니다. 정광 교수가 말한 ‘훈민정음이 파스파 문자로부터 일부 받은 영향’이란 이런 것입니다. 어금닛소리인 아음(牙音), 혓소리인 설음(舌音), 입술소리인 순음(脣音) 같은 36개의 중국어 자모(字母·한글의 초성에 해당)를 기본틀로 해서 글자를 만든 것에서 유사점이 있다는 얘기죠.

그러나 한글의 자형은 완전히 독창적인 것이라는 분석입니다. 파스파 문자가 기존 티베트 문자의 형태를 조금 변형해 만든 것인 반면, 훈민정음은 발음기관의 모습과 천지인 삼재를 표현해 체계적이고 과학적으로 만들었다는 것입니다. 천지인 삼재라는 것이 얼마나 합리적이고 편리한 것인지는 휴대전화 자판을 쓰는 21세기의 우리가 너무나 잘 알고 있을 것입니다.

문제는 세계의 소위 문자학자라는 사람들이 ‘훈민정음’의 제자해(制字解)편조차 제대로 읽어보지 않았다는 것입니다. 글자를 어떻게 만들었는지 그 원리를 기록해 놓은 무척 중요한 부분입니다. 글자를 만든 원리를 글자 창안과 동시에 기록한 문자는 이 세상에서 한글 밖에는 없습니다. 그것은 어떤 기록이었을까요. 사실 곰곰이 돌이켜 보면 예전 학교 다닐 때 국어시간에 나왔던 얘기들이기도 합니다.

“아음 ㄱ(기역)은 혀뿌리가 구멍을 막는 모습을 본떴다.”

“치음(齒音·잇소리) ㅅ(시옷)은 치아의 모습을 본떴다.”

“후음(喉音·목구멍소리) ㅇ(이응)은 목구멍의 모습을 본떴다.”

03 VPVKS23V2VDOTHBUSLR7TF3W5Y.png
 
한글 기본 자음의 제자(制字) 원리를 그림으로 표현한 것. /수학동아

어떤 발음이 입 안에서 어떤 신체 기관에 의해 나는지를 파악해 그 기관의 형상에서 유래된 모양의 글자를 만들었다는 것입니다. 이걸 모르기 때문에 일부 중국인 관광객 가이드들이 경복궁 같은 데서 ‘세종이 창호지 바른 문 모양을 보고 기역 니은 디귿을 만들었고 손잡이를 보고 이응을 만들었다’고 말하는 식의 근본과 개념을 상실한 헛소리들이 나오게 되는 것입니다.

한글에는 여기서 한발 더 나아간 ‘킥’이 있습니다. 초성·중성·종성으로 이뤄진 음절 하나를 한 글자로 표현하는 데 성공한다 해도, 초성이 묵음인 경우엔 어떻게 해야 하는가요? 바로 소리가 나지 않는 ‘ㅇ’을 여기에 넣은 절묘한 해법이었습니다.

묵음을 ㄱ도 ㄴ도 ㅅ도 아닌 동그라미로 표현하다니! 이것은 아무것도 없다는 아라비아 숫자 ‘0′과도 통하는 무(無)의 개념이 아니겠습니까. 이렇게 하면 모든 중성자(모음)를 독립적으로 사용할 수 있게 됩니다. 정 교수는 또한 파스파 문자에는 전혀 없는 종성(받침)이 존재하는 것 역시 훈민정음만의 독창성이라고 했습니다.

그러니까 위 그림에서 보이는 듯한 파스파 문자와 한글의 유사점은 그저 우연이었던 것입니다. 한글의 ‘ㅇ(이응)’은 영문 대문자 ‘O(오)’, ‘ㅌ(티읕)’은 대문자 ‘E(이)’, 모음 ‘ㅣ(이)’는 소문자 ‘l(엘)’과 유사한데 그럼 훈민정음이 알파벳을 모방한 걸까요? 심지어 마지막 경우는 자판의 위치까지 같습니다.

과장된 국수주의나 애국심을 요즘 말로 ‘국뽕’이라고 합니다. 차오르는 국뽕의 거품을 걷어내고 또 걷어낸다 해도 마지막으로 남는 국뽕의 고갱이는 바로 한글이 아닐까, 이렇게 생각해 봅니다. 물론 그렇다고 한글 전용이 바람직하다는 얘기는 아닙니다. 훈민정음을 창제한 원래 목적이 한자의 발음을 제대로 표기하기 위한 것이며 우리말 단어의 7할이 한자어임을 생각하면, 한국인이 한글과 한자라는 두 칼을 양손에 든다면 세상에 두려울 게 없을 것입니다.

04 AL5OYAXDVFAMRL4F445KZKSQIA.png 

05 https___s3.amazonaws.com_arc-authors_chosun_93b57889-9aef-4bda-8114-307f8326c013.png

[출처] https://www.chosun.com/culture-life/relion-academia/2024/11/29/IDLNROQPW5D5NFDRMBCKKCTAHE/

Loading

29 11월 2024

[DeepLearning] Learning to generate lyrics and music with Recurrent Neural Networks : 순환 신경망을 사용하여 가사와 음악을 생성하는 방법 배우기

[DeepLearning] Learning to generate lyrics and music with Recurrent Neural Networks : 순환 신경망을 사용하여 가사와 음악을 생성하는 방법 배우기

순환 신경망을 사용하여 가사와 음악을 생성하는 방법 배우기

RNN 기반 생성 모델을 가사와 피아노 음악 생성에 적용한 사례를 보여주는 게시물입니다.


소개

이 게시물에서는 가장 인기 있는/최근 아티스트의 가사 데이터 세트에서 RNN 문자 수준 언어 모델을 학습합니다. 학습된 모델을 가지고 다양한 아티스트의 다양한 스타일을 재밌게 섞은 몇 곡을 샘플링합니다. 그런 다음 모델을 업데이트하여 조건부 문자 수준 RNN으로 만들어 아티스트에 따라 노래를 샘플링할 수 있습니다. 마지막으로 피아노 곡의 미디 데이터 세트에서 모델을 학습하여 마무리합니다. 이러한 모든 작업을 해결하는 동안 문자 수준 RNN, 조건부 문자 수준 RNN, RNN 샘플링, 시간에 따른 절단된 역전파 및 그래디언트 체크포인팅과 같은 RNN 학습 및 추론과 관련된 몇 가지 흥미로운 개념을 간략하게 살펴보겠습니다. 모든 코드와 학습된 모델은 github에서 사용할 수 있으며 Pytorch 로 구현되었습니다 . 블로그 게시물은 jupyter notebook 형식으로도 볼 수 있습니다 . 문자 수준 언어 모델과 순환 신경망에 익숙하다면 해당 섹션을 건너뛰거나 결과 섹션으로 바로 이동하세요.

문자 수준 언어 모델

PNG 파일

모델을 선택하기 전에, 우리의 과제를 자세히 살펴보겠습니다. 현재 문자와 이전의 모든 문자가 주어졌을 때, 우리는 다음 문자를 예측해 볼 것입니다. 훈련하는 동안 우리는 시퀀스를 취하고, 마지막 문자를 제외한 모든 문자를 입력으로 사용하고, 두 번째 문자에서 시작하는 동일한 시퀀스를 기준 진실로 사용할 것입니다(위의 그림 참조; 출처 ). 우리는 예측을 할 때 이전의 모든 문자를 무시하는 가장 간단한 모델에서 시작하여, 이 모델을 개선하여 특정 수의 이전 문자만 고려하도록 하고, 예측을 할 때 이전의 모든 문자를 고려하는 모델로 결론지을 것입니다.

우리의 언어 모델은 문자 수준에서 정의됩니다. 우리는 모든 영어 문자와 마침표, 쉼표, 줄 끝 기호와 같은 일부 특수 기호를 포함하는 사전을 만들 것입니다. 각 문자는 one-hot-encoded 텐서로 표현됩니다. 문자 수준 모델과 예제에 대한 자세한 내용은 이 리소스를 추천합니다 .

문자를 가지고 있으므로 이제 문자 시퀀스를 형성할 수 있습니다. 지금도 고정된 확률로 문자를 무작위로 샘플링하여 문장을 생성할 수 있습니다 . 이것이 가장 간단한 문자 수준 언어 모델입니다. 이것보다 더 나은 방법은 없을까요? 그렇습니다. 훈련 코퍼스에서 각 문자의 발생 확률(문자가 발생하는 횟수를 데이터 세트 크기로 나눈 값)을 계산하고 이러한 확률을 사용하여 문자를 무작위로 샘플링할 수 있습니다. 이 모델은 더 좋지만 각 문자의 상대적인 위치적 측면을 완전히 무시합니다. 예를 들어, 단어를 읽는 방법에 주의하세요. 첫 번째 문자부터 시작하는데, 이는 일반적으로 예측하기 어렵지만 단어의 끝에 도달하면 때때로 다음 문자를 추측할 수 있습니다. 단어를 읽을 때 다른 텍스트를 읽고 배운 일부 규칙을 암묵적으로 사용하고 있습니다. 예를 들어, 단어에서 읽는 문자가 하나 더 추가될 때마다 공백 문자의 확률이 증가하거나(정말 긴 단어는 드뭅니다) 문자 “r” 뒤에 자음이 올 확률은 일반적으로 모음 뒤에 오기 때문에 낮습니다. 비슷한 규칙이 많이 있고, 우리 모델이 데이터로부터 이를 학습할 수 있기를 바랍니다. 우리 모델이 이러한 규칙을 학습할 수 있는 기회를 주기 위해 모델을 확장해야 합니다.

모델을 조금씩 점진적으로 개선하고 각 문자의 확률을 이전에 발생한 문자에만 의존하도록 합시다( 마르코프 가정 ). 따라서 기본적으로 . 이것은 마르코프 연쇄 모델 입니다( 익숙하지 않다면 이러한 대화형 시각화 도 시도해 보세요). 또한 훈련 데이터 세트에서 확률 분포를 추정할 수 있습니다. 이 모델은 대부분의 경우 현재 문자의 확률이 이전 문자에만 의존하지 않기 때문에 제한적입니다.

우리가 모델링하고자 하는 것은 실제로 . 처음에는 이전 문자의 수가 가변적이고 긴 시퀀스의 경우 정말 커질 수 있기 때문에 작업이 난해해 보입니다. Reccurent Neural Netoworks는 공유 가중치와 고정 크기 숨겨진 상태를 사용하여 어느 정도 이 문제를 해결할 수 있는 것으로 밝혀졌습니다. 이는 RNN에 전념하는 다음 섹션으로 이어집니다.

순환 신경망

PNG 파일

순환 신경망은 순차적 데이터를 처리하기 위한 신경망 계열입니다. 피드포워드 신경망과 달리 RNN은 내부 메모리를 사용하여 임의의 입력 시퀀스를 처리할 수 있습니다. 임의의 크기의 입력 시퀀스로 인해 사이클이 있는 그래프로 간결하게 표현됩니다(그림 참조; 출처 ). 하지만 입력 시퀀스의 크기를 알면 “펼쳐질” 수 있습니다. 현재 입력 과 이전 숨겨진 상태 에서 출력 과 현재 숨겨진 상태 로의 비선형 매핑을 정의합니다 . 숨겨진 상태 크기는 미리 정의된 크기를 가지며 각 단계에서 업데이트되고 매핑 결과에 영향을 미치는 기능을 저장합니다.

이제 문자 수준 언어 모델의 이전 그림과 접힌 RNN 그림을 맞춰서 RNN 모델을 사용하여 문자 수준 언어 모델을 어떻게 학습하는지 살펴보겠습니다.

그림에서는 Vanilla RNN을 사용하고 있지만, 우리의 작업에서는 LSTM을 사용할 것입니다. 왜냐하면 훈련이 더 쉽고 보통 더 나은 결과를 얻을 수 있기 때문입니다.

RNN에 대한 더 자세한 소개는 다음 자료 를 참조하세요 .

가사 데이터 세트

실험을 위해 우리는 다양한 최신 아티스트와 더 오래된 아티스트를 포함하는 55,000개 이상의 노래 가사 Kaggle 데이터 세트를 선택했습니다 . 이는 판다스 파일로 저장되며, 훈련 목적으로 사용할 수 있도록 파이썬 래퍼를 작성했습니다. 코드를 사용하려면 직접 다운로드해야 합니다.

결과를 더 잘 해석하기 위해, 나는 내가 어느 정도 알고 있는 아티스트 하위 집합을 선택했습니다.

artists = [
'ABBA',
'Ace Of Base',
'Aerosmith',
'Avril Lavigne',
'Backstreet Boys',
'Bob Marley',
'Bon Jovi',
'Britney Spears',
'Bruno Mars',
'Coldplay',
'Def Leppard',
'Depeche Mode',
'Ed Sheeran',
'Elton John',
'Elvis Presley',
'Eminem',
'Enrique Iglesias',
'Evanescence',
'Fall Out Boy',
'Foo Fighters',
'Green Day',
 'HIM',
 'Imagine Dragons',
 'Incubus',
 'Jimi Hendrix',
 'Justin Bieber',
 'Justin Timberlake',
'Kanye West',
 'Katy Perry',
 'The Killers',
 'Kiss',
 'Lady Gaga',
 'Lana Del Rey',
 'Linkin Park',
 'Madonna',
 'Marilyn Manson',
 'Maroon 5',
 'Metallica',
 'Michael Bolton',
 'Michael Jackson',
 'Miley Cyrus',
 'Nickelback',
 'Nightwish',
 'Nirvana',
 'Oasis',
 'Offspring',
 'One Direction',
 'Ozzy Osbourne',
 'P!nk',
 'Queen',
 'Radiohead',
 'Red Hot Chili Peppers',
 'Rihanna',
 'Robbie Williams',
 'Rolling Stones',
 'Roxette',
 'Scorpions',
 'Snoop Dogg',
 'Sting',
 'The Script',
 'U2',
 'Weezer',
 'Yellowcard',
 'ZZ Top']

무조건 문자 수준 언어 모델 훈련

우리의 첫 번째 실험은 전체 코퍼스에서 문자 수준 언어 모델 RNN을 훈련하는 것으로 구성되었습니다. 훈련하는 동안 아티스트 정보는 고려하지 않았습니다.

RNN에서 샘플링

모델을 훈련한 후 몇 곡을 샘플링해 보겠습니다. 기본적으로 RNN은 각 단계에서 로짓을 출력하고 이를 소프트맥스하여 해당 분포에서 샘플링할 수 있습니다. 또는 Gumble-Max 트릭을 사용하여 로짓을 직접 샘플링 할 수도 있는데 이는 동일합니다.

샘플링에 대한 흥미로운 점 하나는 우리가 입력 시퀀스를 부분적으로 스스로 정의하고 그 초기 조건으로 샘플링을 시작할 수 있다는 것입니다. 예를 들어, “Why”로 시작하는 노래를 샘플링할 수 있습니다.

Why do you have to leave me?  
I think I know I'm not the only one  
I don't know if I'm gonna stay awake  
I don't know why I go along  
  
I don't know why I can't go on  
I don't know why I don't know  
I don't know why I don't know  
I don't know why I keep on dreaming of you   

음, 그럴 법한 노래네요 😀

“Well”로 시작하는 노래로 샘플링해 보겠습니다.

Well, I was a real good time  
I was a rolling stone  
I was a rock and roller  
Well, I never had a rock and roll  
There were times I had to do it  
I had a feeling that I was found  
I was the one who had to go  

샘플링 중에 사용되는 “온도” 매개변수가 있는데, 이는 샘플링 프로세스의 무작위성을 제어합니다. 이 매개변수가 0에 가까워지면 샘플링은 argmax와 동일하고 무한대에 가까워지면 샘플링은 균일한 분포에서 샘플링하는 것과 동일합니다. Jang et al.의 관련 논문 에서 그림을 살펴보세요 .

PNG 파일

, 분포는 영향을 받지 않습니다. 를 감소시키면 분포가 더 두드러지게 되며, 이는 더 큰 확률 질량을 가진 값이 증가한다는 것을 의미합니다. 를 0에 가까워지면 샘플링 은 armax와 동일해지므로 해당 값의 확률이 1에 가까워집니다. 를 증가시키기 시작하면 분포가 점점 더 균일해집니다.

이전 샘플은 온도 매개변수가 . 와 같도록 생성되었습니다. . 로 늘리면 어떻게 되는지 살펴보겠습니다 . 샘플:

Why can't we drop out of time?  
We were born for words to see.  
Won't you love this. You're still so amazing.  
This could be that down on Sunday Time.  
Oh, Caroline, a lady floor.  
I thought of love, oh baby.  

좀더 늘려보도록 하죠.

Why - won't we grow up naked?  
We went quietly what we would've still give  
That girl you walked before our bedroom room  
I see your mind is so small to a freak  
Stretching for a cold white-heart of crashing  
Truth in the universal daughter  
  
I lose more and more hard  
I love you anytime at all  
Ah come let your help remind me  
Now I've wanted waste and never noticed  
  
I swear I saw you today  
You needed to get by  
But you sold a hurricane  
Well out whispered in store

사실, 왜 우리는 벌거벗고 자라지 않을까요? 😀 온도가 높아질수록 샘플링된 문장이 점점 더 무작위적이 되는 추세를 볼 수 있죠.

조건부 문자 수준 언어 모델 훈련

특정 아티스트의 스타일로 가사를 생성할 수 있다고 상상해보세요. 모델을 변경하여 훈련 중에 이 정보를 사용할 수 있도록 합시다.

우리는 RNN에 추가 입력을 추가하여 이를 수행할 것입니다. 지금까지 우리의 RNN 모델은 각 단계에서 원핫 인코딩된 문자가 포함된 텐서만 허용했습니다.

우리 모델의 확장은 매우 간단할 것입니다. 아티스트를 나타내는 추가 원핫 인코딩 텐서가 있을 것입니다. 따라서 각 단계에서 RNN은 캐릭터와 아티스트를 나타내는 연결된 텐서로 구성되는 텐서 하나를 허용합니다. 자세한 내용은 여기를 참조하세요 .

조건 언어 모델 RNN에서 샘플링

훈련 후, 우리는 아티스트에 따라 몇 곡을 샘플링했습니다. 아래에서 몇 가지 결과를 찾을 수 있습니다.

그를:

My fears  
And the moment don't make me sing  
So free from you  
The pain you love me yeah  
  
Whatever caused the warmth  
You smile you're happy  
You sit away  
You say it's all in vain  

실제로 가능해 보이는데, 특히 ‘고통’이라는 단어가 사용됐기 때문입니다. 이 단어는 아티스트의 가사에서 매우 흔하게 쓰입니다.

아바:

Oh, my love it makes me close a thing  
You've been heard, I must have waited  
I hear you  
So I say  
Thank you for the music, that makes me cry  
  
And you moving my bad as me, ah-hang wind in the hell  
I was meant to be with you, I'll never be playing up

밥 말리:

Mercy on judgment, we got so much  
  
Alcohol, cry, cry, cry  
Why don't try to find our own  
I want to know, Lord, I wanna give you  
Just saving it, learned  
Is there any more?  
  
All that damage done  
That's all reason, don't worry  
Need a hammer  
I need you more and more  

콜드플레이:

Look at the stars  
Into life matter where you lay  
Saying no doubt  
I don't want to fly  
In my dreams and fight today

I will fall for you  
  
All I know  
And I want you to stay  
Into the night  
  
I want to live waiting  
With my love and always  
Have I wouldn't wasted  
Would it hurt you

카니예 웨스트:

I'm everywhere for you  
The way that it couldn't stop  
I mean it too late and love I made in the world  
I told you so I took the studs full cold-stop  
The hardest stressed growin'  
The hustler raisin' on my tears  
I know I'm true, one of your love

꽤 멋져 보이지만 검증 정확도를 추적하지 않았기 때문에 일부 샘플링된 라인은 rnn에서 기억했을 수도 있다는 점을 명심하세요.더 나은 방법은 훈련 중에 가장 좋은 검증 점수를 제공하는 모델을 선택하는 것입니다(이런 방식으로 훈련을 수행한 다음 섹션의 코드 참조).또한 흥미로운 사실 ​​하나를 발견했습니다.무조건 모델은 일반적으로 지정된 시작 문자열로 샘플링할 때 더 나은 성능을 보입니다.지정된 시작 문자열로 조건부 모델에서 샘플링할 때 실제로 모델에 두 가지 조건(시작 문자열과 아티스트)을 적용한 반면, 이전에 탐색한 모델의 경우 하나의 조건만 적용했습니다.그리고 그 조건부 분포를 잘 모델링할 만큼 충분한 데이터가 없었습니다(모든 아티스트가 비교적 제한된 수의 노래를 가지고 있음).

우리는 코드와 모델을 공개하고 있으며, GPU 없이도 훈련된 모델에서 노래를 샘플링할 수 있습니다. 이는 실제로 컴퓨팅 측면에서 많은 요구가 없기 때문입니다.

미디 데이터 세트

다음으로, 우리는 대략 피아노 곡으로 구성된 작은 미디 데이터세트 로 작업할 것입니다 . 우리는 피아노 데이터세트(트레이닝 분할만)를 사용했습니다 .Nottingam

모든 미디 파일을 피아노 롤로 변환 할 수 있다는 것이 밝혀졌습니다. 피아노 롤은 각 행이 다른 미디 피치이고 각 열이 시간적으로 다른 슬라이스인 시간-주파수 행렬입니다. 따라서 데이터 세트의 각 피아노 곡은 크기의 행렬로 표현되며 , 여기서 는 피아노의 피치 수입니다. 피아노 롤 행렬의 예는 다음과 같습니다.

PNG 파일

이 표현은 음악 이론에 익숙하지 않은 사람이라도 매우 직관적이고 해석하기 쉽습니다. 각 행은 피치를 나타냅니다. 위쪽 행은 저주파 피치를 나타내고 아래쪽 행은 고주파 피치를 나타냅니다. 게다가 시간을 나타내는 수평축이 있습니다. 따라서 특정 피치의 사운드를 특정 시간 동안 연주하면 수평선이 표시됩니다. 전반적으로 이는 유튜브의 피아노 튜토리얼 과 매우 유사합니다 .

이제 문자 수준 모델과 새로운 작업의 유사점을 살펴보겠습니다. 현재의 경우 이전에 연주된 모든 피치를 고려하여 다음 타임스텝에서 연주될 피치를 예측해야 합니다. 피아노 롤 그림을 보면 각 열은 어떤 종류의 음악적 캐릭터를 나타내며 이전의 모든 음악적 캐릭터를 고려하여 다음 음악을 예측하려고 합니다. 텍스트 문자와 음악적 캐릭터의 차이점에 주의해 보겠습니다. 기억하시겠지만 언어 모델의 각 캐릭터는 원핫 벡터로 표현되었습니다(즉, 벡터에서 하나의 값만 이고 다른 값은 입니다 ). 음악적 캐릭터의 경우 한 타임스텝에서 여러 키를 누를 수 있습니다(다성음 데이터 세트로 작업하고 있기 때문입니다). 이 경우 각 타임스텝은 두 개 이상의 를 포함할 수 있는 벡터로 표현됩니다 .

피치 레벨 피아노 음악 모델 훈련

학습을 시작하기 전에, 이전 섹션에서 논의한 다양한 입력을 설명하기 위해 언어 모델에 사용한 손실을 조정해야 합니다. 언어 모델에서, 각 타임스텝에 대한 입력으로 원-핫 인코딩된 텐서(문자)를 사용했고, 출력(예측된 다음 문자)으로 원-핫 인코딩된 텐서를 사용했습니다. 예측된 다음 문자에 대해 단일 배타적 선택을 해야 했기 때문에, 교차 엔트로피 손실을 사용했습니다 .

하지만 이제 우리 모델은 더 이상 원핫 인코딩(여러 키를 누를 수 있음)이 아닌 벡터를 출력합니다. 물론, 눌린 키의 모든 가능한 조합을 별도의 클래스로 처리할 수 있지만, 이는 어렵습니다. 대신 출력 벡터의 각 요소를 이진 변수( – 누름, – 키를 누르지 않음)로 처리합니다. 출력 벡터의 각 요소에 대한 별도의 손실을 이진 교차 엔트로피로 정의합니다. 그리고 최종 손실은 이러한 이진 교차 엔트로피의 평균 합계가 됩니다. 더 잘 이해하기 위해 코드를 읽을 수도 있습니다.

앞서 언급한 변경 사항을 적용한 후, 우리는 모델을 훈련했습니다. 다음 섹션에서는 샘플링을 수행하고 결과를 검사합니다.

피치 레벨 RNN에서 샘플링

우리는 최적화 초기 단계에서 피아노 롤을 샘플링했습니다.

PNG 파일

우리 모델이 데이터 세트의 노래에서 공통적으로 나타나는 하나의 공통 패턴을 학습하기 시작한 것을 볼 수 있습니다. 각 노래는 두 개의 다른 부분으로 구성되어 있습니다. 첫 번째 부분에는 별도로 연주되고 매우 구별되며 종종 부를 수 있는 피치 시퀀스가 ​​포함되어 있습니다 (멜로디라고도 함). 샘플링된 피아노 롤을 보면 이 부분이 하단에서 명확하게 보입니다. 피아노 롤의 상단도 보면 일반적으로 함께 연주되는 피치 그룹이 보입니다. 이것은 멜로디를 동반하는 화음(노래 전체에서 함께 연주되는 피치)의 진행 또는 하모니입니다.

훈련이 끝날 무렵 우리 모델에서 추출한 샘플은 다음과 같이 보이기 시작했습니다.

PNG 파일

보시다시피 이는 이전 섹션에서 보여드린 실제 피아노 롤 사진과 더욱 유사해 보이기 시작했습니다.

훈련 후, 우리는 노래를 샘플링하고 분석했습니다. 흥미로운 소개가 있는 샘플 하나를 얻었습니다 . 다른 샘플은 멋진 스타일 전환을 특징으로 합니다 . 동시에 낮은 온도 매개변수를 가진 몇 가지 예를 생성하여 느린 템포의 노래를 만들었습니다. 첫 번째 와 두 번째는 여기 있습니다 . 전체 재생 목록은 여기 에서 찾을 수 있습니다 .

이제 GPU 메모리 소비와 속도 관점에서 문제를 살펴보겠습니다.

우리는 배치로 시퀀스를 처리함으로써 계산 속도를 크게 높였습니다. 동시에, 시퀀스가 ​​길어질수록(데이터 세트에 따라 다름) 최대 배치 크기가 감소하기 시작합니다. 왜 그럴까요? 역전파를 사용하여 기울기를 계산할 때, 메모리 소비에 가장 큰 영향을 미치는 모든 중간 활동을 저장해야 합니다. 시퀀스가 ​​길어질수록 더 많은 활성화를 저장해야 하므로 배치에 더 적은 예제를 넣을 수 있습니다.

때로는 정말 긴 시퀀스로 작업해야 하거나 배치 크기를 늘리거나, 아니면 사용 가능한 메모리 양이 적은 GPU가 필요할 수도 있습니다. 이 경우 메모리 소모를 줄이는 여러 가지 가능한 솔루션이 있지만, 서로 다른 상충 관계가 있는 두 가지를 언급하겠습니다.

첫 번째는 잘린 역전파 입니다 . 아이디어는 전체 시퀀스를 하위 시퀀스로 분할하고 이를 별도의 배치로 처리하는 것입니다. 단, 이러한 배치를 분할 순서대로 처리하고 모든 다음 배치는 이전 배치의 숨겨진 상태를 초기 숨겨진 상태로 사용합니다. 또한 이 접근 방식의 구현을 제공하여 더 잘 이해할 수 있도록 합니다. 이 접근 방식은 분명히 전체 시퀀스를 처리하는 것과 정확히 동일하지는 않지만 더 자주 업데이트하고 메모리를 덜 사용합니다. 반면에 한 하위 시퀀스의 길이를 넘어서는 장기 종속성을 포착하지 못할 가능성이 있습니다.

두 번째는 그래디언트 체크포인팅 입니다 . 이 방법은 더 많은 계산을 수행하는 대가로 전체 시퀀스에서 모델을 학습하는 동안 더 적은 메모리를 사용할 수 있는 가능성을 제공합니다. 기억하시겠지만, 이전에 학습하는 동안 가장 많은 메모리가 활성화에 의해 차지된다고 언급했습니다. 그래디언트 체크포인팅의 아이디어는 모든 -번째 활성화만 저장하고 나중에 저장되지 않은 활성화를 다시 계산하는 것입니다. 이 방법은 이미 Tensorflow에 구현되어 있으며 Pytorch에 구현되고 있습니다 .

결론 및 향후 작업

저희의 작업에서는 텍스트에 대한 간단한 생성 모델을 훈련하고, 다성음악에 맞춰 모델을 확장했으며, 샘플링이 작동하는 방식과 온도 매개변수가 텍스트와 음악 샘플에 어떤 영향을 미치는지 간략히 살펴보았습니다. 낮은 온도는 더 안정적인 결과를 제공하는 반면, 높은 온도는 더 많은 무작위성을 추가하여 때로는 매우 흥미로운 샘플이 생성됩니다.

향후 작업에는 두 가지 방향이 포함될 수 있습니다. 더 많은 응용 프로그램 또는 이미 훈련된 모델에 대한 심층 분석입니다. 예를 들어 동일한 모델을 Spotify 청취 기록에 적용할 수 있습니다. 청취 기록 데이터에 대한 학습이 끝나면 이전 1시간 정도 동안 들었던 노래 시퀀스를 제공하면 하루 종일 재생 목록을 샘플링합니다. 탐색 기록에도 동일한 작업을 수행할 수 있으며, 탐색 행동 패턴을 분석하는 멋진 도구가 됩니다. 다양한 활동(헬스장에서 운동, 사무실에서 일하기, 수면)을 수행하는 동안 휴대폰에서 가속도계 및 자이로스코프 데이터를 수집 하고 이러한 활동 단계를 분류하는 방법을 학습합니다. 그런 다음 활동에 따라 음악 재생 목록을 자동으로 변경할 수 있습니다(수면 – 비 오는 차분한 음악, 헬스장에서 운동 – 고강도 음악). 의료 응용 프로그램의 경우 이 작업 과 유사하게 모델을 적용하여 맥박 및 기타 데이터를 기반으로 심장 문제를 감지할 수 있습니다 .

음악 생성을 위해 훈련된 RNN에서 뉴런 발화를 분석하는 것은 매우 흥미로울 것입니다 . 모델이 몇 가지 간단한 음악 개념(화성과 멜로디에 대한 논의와 같은)을 암묵적으로 배웠는지 확인하기 위해서입니다. RNN의 숨겨진 표현을 사용하여 음악 데이터 세트를 클러스터링하여 유사한 노래를 찾을 수 있습니다.

이 글을 마무리하기 위해 무조건 모델의 마지막 가사를 샘플링해 보겠습니다 😀 :

The story ends  
The sound of the blue  
The tears were shining  
The story of my life  
I still believe  
The story of my life 

[출처] https://warmspringwinds.github.io/pytorch/rnns/2018/01/27/learning-to-generate-lyrics-and-music-with-recurrent-neural-networks/

Learning to generate lyrics and music with Recurrent Neural Networks

A post showing an application of RNN-based generative models for lyrics and piano music generation.


Introduction

In this post we will train RNN character-level language model on lyrics dataset of most popular/recent artists. Having a trained model, we will sample a couple of songs which will be a funny mixture of different styles of different artists. After that we will update our model to become a conditional character-level RNN, making it possible for us to sample songs conditioned on artist. And finally, we conclude by training our model on midi dataset of piano songs. While solving all these tasks, we will briefly explore some interesting concepts related to RNN training and inference like character-level RNN, conditional character-level RNN, sampling from RNN, truncated backpropagation through time and gradient checkpointing. All the code and trained models are available on github and were implemented in Pytorch. The blog post can also be viewed in a jupyter notebook format. If you are already familiar with the character-level language model and recurrent neural networks, feel free to skip respective sections or go directly to the results section.

Character-Level language model

png

Before choosing a model, let’s have a closer look at our task. Given current letter and all previous letters, we will try to predict the next character. During training we will just take a sequence, and use all its characters except the last one as an input and the same sequence starting from the second character as groundtruth (see the picture above; Source). We will start from the simplest model that ignores all the previous characters while making a prediction, improve this model to make it take only a certain number of previous characters into account, and conclude with a model that takes all the previous characters into consideration while making a prediction.

Our language model is defined on a character level. We will create a dictionary which will contain all English characters plus some special symbols, like period, comma, and end-of-line symbol. Each charecter will be represented as one-hot-encoded tensor. For more information about character-level models and examples, I recommend this resource.

Having characters, we can now form sequences of characters. We can generate sentences even now just by randomly sampling character after character with a fixed probability . That’s the most simple character level language model. Can we do better than this? Yes, we can compute the probabily of occurance of each letter from our training corpus (number of times a letter occures divided by the size of our dataset) and randomly sample letter using these probabilities. This model is better but it totally ignores the relative positional aspect of each letter. For example, pay attention on how you read any word: you start with the first letter, which is usually hard to predict, but as you reach the end of a word you can sometimes guess the next letter. When you read any word you are implicitly using some rules which you learned by reading other texts: for example, with each additional letter that you read from a word, the probability of a space character increases (really long words are rare) or the probability of any consonant after the letter “r” is low as it usually followed by vowel. There are lot of similar rules and we hope that our model will be able to learn them from data. To give our model a chance to learn these rules we need to extend it.

Let’s make a small gradual improvement of our model and let probability of each letter depend only on the previously occured letter (markov assumption). So, basically we will have . This is a Markov chain model (also try these interactive visualizations if you are not familiar with it). We can also estimate the probability distribution from our training dataset. This model is limited because in most cases the probability of the current letter depends not only on the previous letter.

What we would like to model is actually . At first, the task seems intractable as the number of previous letters is variable and it might become really large in case of long sequences. Turns out Reccurent Neural Netoworks can tackle this problem to a certain extent by using shared weights and fixed size hidden state. This leads us to a next section dedicated to RNNs.

Recurrent Neural Networks

png

Recurrent neural networks are a family of neural networks for processing sequential data. Unlike feedforward neural networks, RNNs can use their internal memory to process arbitrary sequences of inputs. Because of arbitrary size input sequences, they are concisely depicted as a graph with a cycle (see the picture; Source). But they can be “unfolded” if the size of input sequence is known. They define a non-linear mapping from a current input and previous hidden state to the output and current hidden state . Hidden state size has a predefined size and stores features which are updated on each step and affect the result of mapping.

Now align the previous picture of the character-level language model and the ufolded RNN picture to see how we are using the RNN model to learn a character level language model.

While the picture depicts the Vanilla RNN, we will use LSTM in our work as it is easier to train usually achieves better results.

For a more elaborate introduction to RNNs, we refer reader to the following resource.

Lyrics dataset

For our experiments we have chosen 55000+ Song Lyrics Kaggle dataset which contains good variety of recent artists and more older ones. It is stored as a pandas file and we wrote a python wrapper around it to be able to use it for training purposes. You will have to download it yourself in order to be able to use our code.

In order to be able to interpret the results better, I have chosen a subset of artists which I am more or less familiar with:

artists = [
'ABBA',
'Ace Of Base',
'Aerosmith',
'Avril Lavigne',
'Backstreet Boys',
'Bob Marley',
'Bon Jovi',
'Britney Spears',
'Bruno Mars',
'Coldplay',
'Def Leppard',
'Depeche Mode',
'Ed Sheeran',
'Elton John',
'Elvis Presley',
'Eminem',
'Enrique Iglesias',
'Evanescence',
'Fall Out Boy',
'Foo Fighters',
'Green Day',
 'HIM',
 'Imagine Dragons',
 'Incubus',
 'Jimi Hendrix',
 'Justin Bieber',
 'Justin Timberlake',
'Kanye West',
 'Katy Perry',
 'The Killers',
 'Kiss',
 'Lady Gaga',
 'Lana Del Rey',
 'Linkin Park',
 'Madonna',
 'Marilyn Manson',
 'Maroon 5',
 'Metallica',
 'Michael Bolton',
 'Michael Jackson',
 'Miley Cyrus',
 'Nickelback',
 'Nightwish',
 'Nirvana',
 'Oasis',
 'Offspring',
 'One Direction',
 'Ozzy Osbourne',
 'P!nk',
 'Queen',
 'Radiohead',
 'Red Hot Chili Peppers',
 'Rihanna',
 'Robbie Williams',
 'Rolling Stones',
 'Roxette',
 'Scorpions',
 'Snoop Dogg',
 'Sting',
 'The Script',
 'U2',
 'Weezer',
 'Yellowcard',
 'ZZ Top']

Training unconditional character-level language model

Our first experiment consisted of training of our character-level language model RNN on the whole corpus. We didn’t take into consideration the artist information while training.

Sampling from RNN

Let’s try to sample a couple of songs after training our model. Basically, on each step our RNN will output logits and we can softmax them and sample from that distribution. Or we can use Gumble-Max trick and sample using logits directly which is equivalent.

One intersting thing about sampling is that we can partially define the input sequence ourselves and start sampling with that initial condition. For example, we can sample a song that starts with “Why”:

Why do you have to leave me?  
I think I know I'm not the only one  
I don't know if I'm gonna stay awake  
I don't know why I go along  
  
I don't know why I can't go on  
I don't know why I don't know  
I don't know why I don't know  
I don't know why I keep on dreaming of you   

Well, that sounds like a possible song 😀

Let’s sample with a song that starts with “Well”:

Well, I was a real good time  
I was a rolling stone  
I was a rock and roller  
Well, I never had a rock and roll  
There were times I had to do it  
I had a feeling that I was found  
I was the one who had to go  

There is “temperature” parameter that is used during sampling which controls the randomness of sampling process. When this parameter approaches zero, the sampling is equivalent to argmax and when it is close to infinity the sampling is equivalent to sampling from a uniform distribution. Have a look at the figure from a relevant paper by Jang et al.:

png

When , the distribution is not affected. If we decrease , the distribution becomes more pronounced, meaning that value with bigger probability mass will have it increased. When will approach zero, sampling will be equivalent to armax, because the probability of that value will be close to one. When we start to icrease the distribution becomes more and more uniform.

The previous sample was generated with a temperature paramter equal to . Let’s see what happens when we increase it to and sample:

Why can't we drop out of time?  
We were born for words to see.  
Won't you love this. You're still so amazing.  
This could be that down on Sunday Time.  
Oh, Caroline, a lady floor.  
I thought of love, oh baby.  

Let’s try increasing it even more:

Why - won't we grow up naked?  
We went quietly what we would've still give  
That girl you walked before our bedroom room  
I see your mind is so small to a freak  
Stretching for a cold white-heart of crashing  
Truth in the universal daughter  
  
I lose more and more hard  
I love you anytime at all  
Ah come let your help remind me  
Now I've wanted waste and never noticed  
  
I swear I saw you today  
You needed to get by  
But you sold a hurricane  
Well out whispered in store

Why don’t we grow up naked, indeed? 😀 Well, you can see that trend that when we increase the temperature, sampled sentences become more and more random.

Training conditional character-level language model

Imagine if we could generate lyrics in a style of some particular artist. Let’s change our model, so that it can use this information during training.

We will do this by adding an additional input to our RNN. So far, our RNN model was only accepting tensors containing one-hot encoded character on each step.

The extention to our model will be very simple: we will have and additional one-hot encoded tensor which will represent the artist. So on each step the RNN will accept one tensor which will consist of concatenated tensors representing character and artist. Look here for more.

Sampling from conditional language model RNN

After training, we sampled a couple of songs conditined on artist. Below you can find some results.

Him:

My fears  
And the moment don't make me sing  
So free from you  
The pain you love me yeah  
  
Whatever caused the warmth  
You smile you're happy  
You sit away  
You say it's all in vain  

Seems really possible, especially the fact the the word pain was used, which is very common in the lyrics of the artist.

ABBA:

Oh, my love it makes me close a thing  
You've been heard, I must have waited  
I hear you  
So I say  
Thank you for the music, that makes me cry  
  
And you moving my bad as me, ah-hang wind in the hell  
I was meant to be with you, I'll never be playing up

Bob Marley:

Mercy on judgment, we got so much  
  
Alcohol, cry, cry, cry  
Why don't try to find our own  
I want to know, Lord, I wanna give you  
Just saving it, learned  
Is there any more?  
  
All that damage done  
That's all reason, don't worry  
Need a hammer  
I need you more and more  

Coldplay:

Look at the stars  
Into life matter where you lay  
Saying no doubt  
I don't want to fly  
In my dreams and fight today

I will fall for you  
  
All I know  
And I want you to stay  
Into the night  
  
I want to live waiting  
With my love and always  
Have I wouldn't wasted  
Would it hurt you

Kanye West:

I'm everywhere for you  
The way that it couldn't stop  
I mean it too late and love I made in the world  
I told you so I took the studs full cold-stop  
The hardest stressed growin'  
The hustler raisin' on my tears  
I know I'm true, one of your love

Looks pretty cool but keep in mind that we didn’t track the validation accuracy so some sampled lines could have been just memorized by our rnn. A better way to do it is to pick a model that gives best validation score during training (see the code for the next section where we performed training this way). We also noticed one interesting thing: the unconditional model usually performes better when you want to sample with a specified starting string. Our intuition is that when sampling from a conditional model with a specified starting string, we actually put two conditions on our model – starting string and an artist compared to the one condition in the case of previous model that we explored. And we didn’t have enough data to model that conditional distribution well (every artist has relatively limited number of songs).

We are making the code and models available and you can sample songs from our trained models even without gpu as it is not really computationally demanding.

Midi dataset

Next, we will work with a small midi dataset consisting of approximately piano songs. We have used the Nottingam piano dataset (training split only).

Turns out that any midi file can be converted to piano roll which is just is a time-frequency matrix where each row is a different MIDI pitch and each column is a different slice in time. So each piano song from our dataset will be represented as a matrix of size , where is a number of pitches of the piano. Here is an example of piano roll matrix:

png

This representation is very intuitive and easy to interpret even for a person that is not familiar with music theory. Each row represents a pitch: top rows represent low frequency pitches and bottom rows represent high pitches. Plus, we have a horizontal axis which represents time. So if we play a sound with a certain pitch for a certian period of time, we will see a horizontal line. Overall, this is very similar to piano tutorials on youtube.

Now, let’s try to see the similarities between the character-level model and our new task. In the current case, we will have to predict the pitches that will be played on the next timestep, given all the previously played pitches. So, if you look at the picture of the piano roll, each column represents some kind of a musical character and given all the previous musical characters, we want to predict the next one. Let’s pay attention to the difference between a text character and a musical character. If you recall, each character in our language model was represented by one-hot vector (meaning that only one value in our vector is and others are ). For music character multiple keys can be pressed at one timestep (since we are working with polyphonic dataset). In this case, each timestep will be represented by a vector which can contain more than one .

Training pitch-level piano music model

Before starting the training, we will have to adjust our loss that we have used for language model to account for different input that we discussed in the previous section. In the language model, we had one-hot encoded tensor (character) as an input on each timestep and one-hot encoded tensor as output (predicted next character). As we had to make a single exlusive choice for predicted next character, we used cross-entropy loss.

But now our model outputs a vector which is no longer one-hot encoded (multiple keys can be pressed). Of course, we can treat all possible combinations of pressed keys as a separate class, but this is intractable. Instead, we will treat each element of the output vector as a binary variable ( – pressing, – not pressing a key). We will define a separate loss for each element of the output vector to be binary cross-entropy. And our final loss will be an averaged sum of these binary cross-entropies. You can also read the code to get a better understanding.

After making the aforementioned changes, we trained our model. In the next section, we will perform sampling and inspect the results.

Sampling from pitch-level RNN

We have sampled piano rolls during the early stages of optimization:

png

You can see that our model is starting to learn one common pattern that is common among the songs from our dataset: each song consists of two different parts. First part contains a sequence of pitches that are played separately and are very distinguishable and are often singable (also know as melody). If you look at the sampled piano roll, this part can be clearly seen in the bottom. If you also have a look at the top of our piano roll, we can see a group of pitches that are usually played together – this is harmony or a progression of chords (pitches that are played together throughout the song) which accompanies the melody.

By the end of the training samples drawn from our model started to look like this:

png

As you can see they started to look more similar to the picture of the ground-truth piano roll that we showed in the previous sections.

After training, we have sampled songs and analyzed them. We got one sample with an interesting introduction. While another sample features a nice style transition. At the same time we generated a couple of examples with low temperature parameter which resulted in songs with a slow tempo: first one and a second one here. You can find the whole playlist here.

Now let’s look at our problem from the gpu memory consumption and speed point of view.

We greatly speed up computation by processing our sequences in batches. At the same time, as our sequences become longer (depending on the dataset), our max batch size starts to decrease. Why is it a case? As we use backpropagation to compute gradients, we need to store all the intermediate acitvations, which contribute the most to the memory consumption. As our sequence becomes longer, we need to store more activations, therefore, we can fit less examples in our batch.

Sometimes, we either have to work with really long sequences or we want to increase our batch size or maybe you just have a gpu with small amount of memory available. There are multiple possible solutions to reduce memory consumption in this case, but we will mention two, which will have different trade-offs.

First one is a truncated back propagation. The idea is to split the whole sequence into subsequences and treat them as separate batches with an exception that we process these batches in the order of split and every next batch uses hidden state of previous batch as an initial hidden state. We also provide an implementation of this approach, so that you can get the better understanding. This approach is obviously not an exact equivalent of processing the whole sequence but it makes more frequent updates and consumes less memory. On the other hand, there is a chance that we might not be able to capture long-term dependencies that span beyond the length of one subsequence.

Second one is gradient checkpointing. This method gives us a possibilty to use less memory while training our model on the whole sequence on the expence of performing more computation. If you recall, previously we mentioned that the most memory during training is occupied by activations. The idea of gradient checkpointing consists of storing only every -th activation and recomputing the unsaved activations later. This method is already implemented in Tensorflow and being implemented in Pytorch.

Conclusion and future work

In our work we trained simple generative model for text, extended our model to work with polyphonic music, briefly looked at how sampling works and how the temperature parameter affects our text and music samples – low temperature gives more stable results while high temperature adds more randomness which sometimes gives rise to very interesting samples.

Future work can include two directions – more applications or deeper analysis of the already trained models. Same models can be applied to your spotify listening history, for example. After training on your listening history data, you can give it a sequence of songs that you have listened to in the previous hour or so, and it will sample a playlist for you for the rest of the day. Well, you can also do the same for your browsing history, which will be just a cool tool to analyze your browsing behaviour patterns. Capture the accelerometer and gyroscope data from your phone while doing different activities (exercising in the gym, working in the office, sleeping) and learn to classify these activity stages. After that you can change your music playlist automatically, based on your activity (sleeping – calm music of rain, exercising in the gym – high intensity music). In terms of medical applications, model can be applied to detect heart problems based on pulse and other data, similar to this work.

It would be very interesting to analyze the neuron firings in our RNN trained for music generation like here. To see if the model learned some simple music concepts implicitly (like our discussion of harmony and melody). The hidden representation of RNN can be used to cluster our music dataset to find similar songs.

Let’s sample one last lyrics from our unconditional model to conclude this post 😀 :

The story ends  
The sound of the blue  
The tears were shining  
The story of my life  
I still believe  
The story of my life 

Loading